{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- |
-- Module      : Amazonka.CloudWatchLogs
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Derived from API version @2014-03-28@ of the AWS service descriptions, licensed under Apache 2.0.
--
-- You can use Amazon CloudWatch Logs to monitor, store, and access your
-- log files from EC2 instances, CloudTrail, and other sources. You can
-- then retrieve the associated log data from CloudWatch Logs using the
-- CloudWatch console. Alternatively, you can use CloudWatch Logs commands
-- in the Amazon Web Services CLI, CloudWatch Logs API, or CloudWatch Logs
-- SDK.
--
-- You can use CloudWatch Logs to:
--
-- -   __Monitor logs from EC2 instances in real time__: You can use
--     CloudWatch Logs to monitor applications and systems using log data.
--     For example, CloudWatch Logs can track the number of errors that
--     occur in your application logs. Then, it can send you a notification
--     whenever the rate of errors exceeds a threshold that you specify.
--     CloudWatch Logs uses your log data for monitoring so no code changes
--     are required. For example, you can monitor application logs for
--     specific literal terms (such as \"NullReferenceException\"). You can
--     also count the number of occurrences of a literal term at a
--     particular position in log data (such as \"404\" status codes in an
--     Apache access log). When the term you are searching for is found,
--     CloudWatch Logs reports the data to a CloudWatch metric that you
--     specify.
--
-- -   __Monitor CloudTrail logged events__: You can create alarms in
--     CloudWatch and receive notifications of particular API activity as
--     captured by CloudTrail. You can use the notification to perform
--     troubleshooting.
--
-- -   __Archive log data__: You can use CloudWatch Logs to store your log
--     data in highly durable storage. You can change the log retention
--     setting so that any log events earlier than this setting are
--     automatically deleted. The CloudWatch Logs agent helps to quickly
--     send both rotated and non-rotated log data off of a host and into
--     the log service. You can then access the raw log data when you need
--     it.
module Amazonka.CloudWatchLogs
  ( -- * Service Configuration
    defaultService,

    -- * Errors
    -- $errors

    -- ** DataAlreadyAcceptedException
    _DataAlreadyAcceptedException,

    -- ** InvalidOperationException
    _InvalidOperationException,

    -- ** InvalidParameterException
    _InvalidParameterException,

    -- ** InvalidSequenceTokenException
    _InvalidSequenceTokenException,

    -- ** LimitExceededException
    _LimitExceededException,

    -- ** MalformedQueryException
    _MalformedQueryException,

    -- ** OperationAbortedException
    _OperationAbortedException,

    -- ** ResourceAlreadyExistsException
    _ResourceAlreadyExistsException,

    -- ** ResourceNotFoundException
    _ResourceNotFoundException,

    -- ** ServiceUnavailableException
    _ServiceUnavailableException,

    -- ** TooManyTagsException
    _TooManyTagsException,

    -- ** UnrecognizedClientException
    _UnrecognizedClientException,

    -- * Waiters
    -- $waiters

    -- * Operations
    -- $operations

    -- ** AssociateKmsKey
    AssociateKmsKey (AssociateKmsKey'),
    newAssociateKmsKey,
    AssociateKmsKeyResponse (AssociateKmsKeyResponse'),
    newAssociateKmsKeyResponse,

    -- ** CancelExportTask
    CancelExportTask (CancelExportTask'),
    newCancelExportTask,
    CancelExportTaskResponse (CancelExportTaskResponse'),
    newCancelExportTaskResponse,

    -- ** CreateExportTask
    CreateExportTask (CreateExportTask'),
    newCreateExportTask,
    CreateExportTaskResponse (CreateExportTaskResponse'),
    newCreateExportTaskResponse,

    -- ** CreateLogGroup
    CreateLogGroup (CreateLogGroup'),
    newCreateLogGroup,
    CreateLogGroupResponse (CreateLogGroupResponse'),
    newCreateLogGroupResponse,

    -- ** CreateLogStream
    CreateLogStream (CreateLogStream'),
    newCreateLogStream,
    CreateLogStreamResponse (CreateLogStreamResponse'),
    newCreateLogStreamResponse,

    -- ** DeleteDataProtectionPolicy
    DeleteDataProtectionPolicy (DeleteDataProtectionPolicy'),
    newDeleteDataProtectionPolicy,
    DeleteDataProtectionPolicyResponse (DeleteDataProtectionPolicyResponse'),
    newDeleteDataProtectionPolicyResponse,

    -- ** DeleteDestination
    DeleteDestination (DeleteDestination'),
    newDeleteDestination,
    DeleteDestinationResponse (DeleteDestinationResponse'),
    newDeleteDestinationResponse,

    -- ** DeleteLogGroup
    DeleteLogGroup (DeleteLogGroup'),
    newDeleteLogGroup,
    DeleteLogGroupResponse (DeleteLogGroupResponse'),
    newDeleteLogGroupResponse,

    -- ** DeleteLogStream
    DeleteLogStream (DeleteLogStream'),
    newDeleteLogStream,
    DeleteLogStreamResponse (DeleteLogStreamResponse'),
    newDeleteLogStreamResponse,

    -- ** DeleteMetricFilter
    DeleteMetricFilter (DeleteMetricFilter'),
    newDeleteMetricFilter,
    DeleteMetricFilterResponse (DeleteMetricFilterResponse'),
    newDeleteMetricFilterResponse,

    -- ** DeleteQueryDefinition
    DeleteQueryDefinition (DeleteQueryDefinition'),
    newDeleteQueryDefinition,
    DeleteQueryDefinitionResponse (DeleteQueryDefinitionResponse'),
    newDeleteQueryDefinitionResponse,

    -- ** DeleteResourcePolicy
    DeleteResourcePolicy (DeleteResourcePolicy'),
    newDeleteResourcePolicy,
    DeleteResourcePolicyResponse (DeleteResourcePolicyResponse'),
    newDeleteResourcePolicyResponse,

    -- ** DeleteRetentionPolicy
    DeleteRetentionPolicy (DeleteRetentionPolicy'),
    newDeleteRetentionPolicy,
    DeleteRetentionPolicyResponse (DeleteRetentionPolicyResponse'),
    newDeleteRetentionPolicyResponse,

    -- ** DeleteSubscriptionFilter
    DeleteSubscriptionFilter (DeleteSubscriptionFilter'),
    newDeleteSubscriptionFilter,
    DeleteSubscriptionFilterResponse (DeleteSubscriptionFilterResponse'),
    newDeleteSubscriptionFilterResponse,

    -- ** DescribeDestinations (Paginated)
    DescribeDestinations (DescribeDestinations'),
    newDescribeDestinations,
    DescribeDestinationsResponse (DescribeDestinationsResponse'),
    newDescribeDestinationsResponse,

    -- ** DescribeExportTasks (Paginated)
    DescribeExportTasks (DescribeExportTasks'),
    newDescribeExportTasks,
    DescribeExportTasksResponse (DescribeExportTasksResponse'),
    newDescribeExportTasksResponse,

    -- ** DescribeLogGroups (Paginated)
    DescribeLogGroups (DescribeLogGroups'),
    newDescribeLogGroups,
    DescribeLogGroupsResponse (DescribeLogGroupsResponse'),
    newDescribeLogGroupsResponse,

    -- ** DescribeLogStreams (Paginated)
    DescribeLogStreams (DescribeLogStreams'),
    newDescribeLogStreams,
    DescribeLogStreamsResponse (DescribeLogStreamsResponse'),
    newDescribeLogStreamsResponse,

    -- ** DescribeMetricFilters (Paginated)
    DescribeMetricFilters (DescribeMetricFilters'),
    newDescribeMetricFilters,
    DescribeMetricFiltersResponse (DescribeMetricFiltersResponse'),
    newDescribeMetricFiltersResponse,

    -- ** DescribeQueries (Paginated)
    DescribeQueries (DescribeQueries'),
    newDescribeQueries,
    DescribeQueriesResponse (DescribeQueriesResponse'),
    newDescribeQueriesResponse,

    -- ** DescribeQueryDefinitions
    DescribeQueryDefinitions (DescribeQueryDefinitions'),
    newDescribeQueryDefinitions,
    DescribeQueryDefinitionsResponse (DescribeQueryDefinitionsResponse'),
    newDescribeQueryDefinitionsResponse,

    -- ** DescribeResourcePolicies (Paginated)
    DescribeResourcePolicies (DescribeResourcePolicies'),
    newDescribeResourcePolicies,
    DescribeResourcePoliciesResponse (DescribeResourcePoliciesResponse'),
    newDescribeResourcePoliciesResponse,

    -- ** DescribeSubscriptionFilters (Paginated)
    DescribeSubscriptionFilters (DescribeSubscriptionFilters'),
    newDescribeSubscriptionFilters,
    DescribeSubscriptionFiltersResponse (DescribeSubscriptionFiltersResponse'),
    newDescribeSubscriptionFiltersResponse,

    -- ** DisassociateKmsKey
    DisassociateKmsKey (DisassociateKmsKey'),
    newDisassociateKmsKey,
    DisassociateKmsKeyResponse (DisassociateKmsKeyResponse'),
    newDisassociateKmsKeyResponse,

    -- ** FilterLogEvents (Paginated)
    FilterLogEvents (FilterLogEvents'),
    newFilterLogEvents,
    FilterLogEventsResponse (FilterLogEventsResponse'),
    newFilterLogEventsResponse,

    -- ** GetDataProtectionPolicy
    GetDataProtectionPolicy (GetDataProtectionPolicy'),
    newGetDataProtectionPolicy,
    GetDataProtectionPolicyResponse (GetDataProtectionPolicyResponse'),
    newGetDataProtectionPolicyResponse,

    -- ** GetLogEvents
    GetLogEvents (GetLogEvents'),
    newGetLogEvents,
    GetLogEventsResponse (GetLogEventsResponse'),
    newGetLogEventsResponse,

    -- ** GetLogGroupFields
    GetLogGroupFields (GetLogGroupFields'),
    newGetLogGroupFields,
    GetLogGroupFieldsResponse (GetLogGroupFieldsResponse'),
    newGetLogGroupFieldsResponse,

    -- ** GetLogRecord
    GetLogRecord (GetLogRecord'),
    newGetLogRecord,
    GetLogRecordResponse (GetLogRecordResponse'),
    newGetLogRecordResponse,

    -- ** GetQueryResults
    GetQueryResults (GetQueryResults'),
    newGetQueryResults,
    GetQueryResultsResponse (GetQueryResultsResponse'),
    newGetQueryResultsResponse,

    -- ** ListTagsForResource
    ListTagsForResource (ListTagsForResource'),
    newListTagsForResource,
    ListTagsForResourceResponse (ListTagsForResourceResponse'),
    newListTagsForResourceResponse,

    -- ** PutDataProtectionPolicy
    PutDataProtectionPolicy (PutDataProtectionPolicy'),
    newPutDataProtectionPolicy,
    PutDataProtectionPolicyResponse (PutDataProtectionPolicyResponse'),
    newPutDataProtectionPolicyResponse,

    -- ** PutDestination
    PutDestination (PutDestination'),
    newPutDestination,
    PutDestinationResponse (PutDestinationResponse'),
    newPutDestinationResponse,

    -- ** PutDestinationPolicy
    PutDestinationPolicy (PutDestinationPolicy'),
    newPutDestinationPolicy,
    PutDestinationPolicyResponse (PutDestinationPolicyResponse'),
    newPutDestinationPolicyResponse,

    -- ** PutLogEvents
    PutLogEvents (PutLogEvents'),
    newPutLogEvents,
    PutLogEventsResponse (PutLogEventsResponse'),
    newPutLogEventsResponse,

    -- ** PutMetricFilter
    PutMetricFilter (PutMetricFilter'),
    newPutMetricFilter,
    PutMetricFilterResponse (PutMetricFilterResponse'),
    newPutMetricFilterResponse,

    -- ** PutQueryDefinition
    PutQueryDefinition (PutQueryDefinition'),
    newPutQueryDefinition,
    PutQueryDefinitionResponse (PutQueryDefinitionResponse'),
    newPutQueryDefinitionResponse,

    -- ** PutResourcePolicy
    PutResourcePolicy (PutResourcePolicy'),
    newPutResourcePolicy,
    PutResourcePolicyResponse (PutResourcePolicyResponse'),
    newPutResourcePolicyResponse,

    -- ** PutRetentionPolicy
    PutRetentionPolicy (PutRetentionPolicy'),
    newPutRetentionPolicy,
    PutRetentionPolicyResponse (PutRetentionPolicyResponse'),
    newPutRetentionPolicyResponse,

    -- ** PutSubscriptionFilter
    PutSubscriptionFilter (PutSubscriptionFilter'),
    newPutSubscriptionFilter,
    PutSubscriptionFilterResponse (PutSubscriptionFilterResponse'),
    newPutSubscriptionFilterResponse,

    -- ** StartQuery
    StartQuery (StartQuery'),
    newStartQuery,
    StartQueryResponse (StartQueryResponse'),
    newStartQueryResponse,

    -- ** StopQuery
    StopQuery (StopQuery'),
    newStopQuery,
    StopQueryResponse (StopQueryResponse'),
    newStopQueryResponse,

    -- ** TagResource
    TagResource (TagResource'),
    newTagResource,
    TagResourceResponse (TagResourceResponse'),
    newTagResourceResponse,

    -- ** TestMetricFilter
    TestMetricFilter (TestMetricFilter'),
    newTestMetricFilter,
    TestMetricFilterResponse (TestMetricFilterResponse'),
    newTestMetricFilterResponse,

    -- ** UntagResource
    UntagResource (UntagResource'),
    newUntagResource,
    UntagResourceResponse (UntagResourceResponse'),
    newUntagResourceResponse,

    -- * Types

    -- ** DataProtectionStatus
    DataProtectionStatus (..),

    -- ** Distribution
    Distribution (..),

    -- ** ExportTaskStatusCode
    ExportTaskStatusCode (..),

    -- ** OrderBy
    OrderBy (..),

    -- ** QueryStatus
    QueryStatus (..),

    -- ** StandardUnit
    StandardUnit (..),

    -- ** Destination
    Destination (Destination'),
    newDestination,

    -- ** ExportTask
    ExportTask (ExportTask'),
    newExportTask,

    -- ** ExportTaskExecutionInfo
    ExportTaskExecutionInfo (ExportTaskExecutionInfo'),
    newExportTaskExecutionInfo,

    -- ** ExportTaskStatus
    ExportTaskStatus (ExportTaskStatus'),
    newExportTaskStatus,

    -- ** FilteredLogEvent
    FilteredLogEvent (FilteredLogEvent'),
    newFilteredLogEvent,

    -- ** InputLogEvent
    InputLogEvent (InputLogEvent'),
    newInputLogEvent,

    -- ** LogGroup
    LogGroup (LogGroup'),
    newLogGroup,

    -- ** LogGroupField
    LogGroupField (LogGroupField'),
    newLogGroupField,

    -- ** LogStream
    LogStream (LogStream'),
    newLogStream,

    -- ** MetricFilter
    MetricFilter (MetricFilter'),
    newMetricFilter,

    -- ** MetricFilterMatchRecord
    MetricFilterMatchRecord (MetricFilterMatchRecord'),
    newMetricFilterMatchRecord,

    -- ** MetricTransformation
    MetricTransformation (MetricTransformation'),
    newMetricTransformation,

    -- ** OutputLogEvent
    OutputLogEvent (OutputLogEvent'),
    newOutputLogEvent,

    -- ** QueryDefinition
    QueryDefinition (QueryDefinition'),
    newQueryDefinition,

    -- ** QueryInfo
    QueryInfo (QueryInfo'),
    newQueryInfo,

    -- ** QueryStatistics
    QueryStatistics (QueryStatistics'),
    newQueryStatistics,

    -- ** RejectedLogEventsInfo
    RejectedLogEventsInfo (RejectedLogEventsInfo'),
    newRejectedLogEventsInfo,

    -- ** ResourcePolicy
    ResourcePolicy (ResourcePolicy'),
    newResourcePolicy,

    -- ** ResultField
    ResultField (ResultField'),
    newResultField,

    -- ** SearchedLogStream
    SearchedLogStream (SearchedLogStream'),
    newSearchedLogStream,

    -- ** SubscriptionFilter
    SubscriptionFilter (SubscriptionFilter'),
    newSubscriptionFilter,
  )
where

import Amazonka.CloudWatchLogs.AssociateKmsKey
import Amazonka.CloudWatchLogs.CancelExportTask
import Amazonka.CloudWatchLogs.CreateExportTask
import Amazonka.CloudWatchLogs.CreateLogGroup
import Amazonka.CloudWatchLogs.CreateLogStream
import Amazonka.CloudWatchLogs.DeleteDataProtectionPolicy
import Amazonka.CloudWatchLogs.DeleteDestination
import Amazonka.CloudWatchLogs.DeleteLogGroup
import Amazonka.CloudWatchLogs.DeleteLogStream
import Amazonka.CloudWatchLogs.DeleteMetricFilter
import Amazonka.CloudWatchLogs.DeleteQueryDefinition
import Amazonka.CloudWatchLogs.DeleteResourcePolicy
import Amazonka.CloudWatchLogs.DeleteRetentionPolicy
import Amazonka.CloudWatchLogs.DeleteSubscriptionFilter
import Amazonka.CloudWatchLogs.DescribeDestinations
import Amazonka.CloudWatchLogs.DescribeExportTasks
import Amazonka.CloudWatchLogs.DescribeLogGroups
import Amazonka.CloudWatchLogs.DescribeLogStreams
import Amazonka.CloudWatchLogs.DescribeMetricFilters
import Amazonka.CloudWatchLogs.DescribeQueries
import Amazonka.CloudWatchLogs.DescribeQueryDefinitions
import Amazonka.CloudWatchLogs.DescribeResourcePolicies
import Amazonka.CloudWatchLogs.DescribeSubscriptionFilters
import Amazonka.CloudWatchLogs.DisassociateKmsKey
import Amazonka.CloudWatchLogs.FilterLogEvents
import Amazonka.CloudWatchLogs.GetDataProtectionPolicy
import Amazonka.CloudWatchLogs.GetLogEvents
import Amazonka.CloudWatchLogs.GetLogGroupFields
import Amazonka.CloudWatchLogs.GetLogRecord
import Amazonka.CloudWatchLogs.GetQueryResults
import Amazonka.CloudWatchLogs.Lens
import Amazonka.CloudWatchLogs.ListTagsForResource
import Amazonka.CloudWatchLogs.PutDataProtectionPolicy
import Amazonka.CloudWatchLogs.PutDestination
import Amazonka.CloudWatchLogs.PutDestinationPolicy
import Amazonka.CloudWatchLogs.PutLogEvents
import Amazonka.CloudWatchLogs.PutMetricFilter
import Amazonka.CloudWatchLogs.PutQueryDefinition
import Amazonka.CloudWatchLogs.PutResourcePolicy
import Amazonka.CloudWatchLogs.PutRetentionPolicy
import Amazonka.CloudWatchLogs.PutSubscriptionFilter
import Amazonka.CloudWatchLogs.StartQuery
import Amazonka.CloudWatchLogs.StopQuery
import Amazonka.CloudWatchLogs.TagResource
import Amazonka.CloudWatchLogs.TestMetricFilter
import Amazonka.CloudWatchLogs.Types
import Amazonka.CloudWatchLogs.UntagResource
import Amazonka.CloudWatchLogs.Waiters

-- $errors
-- Error matchers are designed for use with the functions provided by
-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-- This allows catching (and rethrowing) service specific errors returned
-- by 'CloudWatchLogs'.

-- $operations
-- Some AWS operations return results that are incomplete and require subsequent
-- requests in order to obtain the entire result set. The process of sending
-- subsequent requests to continue where a previous request left off is called
-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-- 1000 objects at a time, and you must send subsequent requests with the
-- appropriate Marker in order to retrieve the next page of results.
--
-- Operations that have an 'AWSPager' instance can transparently perform subsequent
-- requests, correctly setting Markers and other request facets to iterate through
-- the entire result set of a truncated API operation. Operations which support
-- this have an additional note in the documentation.
--
-- Many operations have the ability to filter results on the server side. See the
-- individual operation parameters for details.

-- $waiters
-- Waiters poll by repeatedly sending a request until some remote success condition
-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-- determines how many attempts should be made, in addition to delay and retry strategies.