:py:mod:`airflow.providers.amazon.aws.log.cloudwatch_task_handler`
==================================================================

.. py:module:: airflow.providers.amazon.aws.log.cloudwatch_task_handler


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.log.cloudwatch_task_handler.CloudwatchTaskHandler




.. py:class:: CloudwatchTaskHandler(base_log_folder, log_group_arn, filename_template = None)

   Bases: :py:obj:`airflow.utils.log.file_task_handler.FileTaskHandler`, :py:obj:`airflow.utils.log.logging_mixin.LoggingMixin`

   CloudwatchTaskHandler is a python log handler that handles and reads task instance logs.

   It extends airflow FileTaskHandler and uploads to and reads from Cloudwatch.

   :param base_log_folder: base folder to store logs locally
   :param log_group_arn: ARN of the Cloudwatch log group for remote log storage
       with format ``arn:aws:logs:{region name}:{account id}:log-group:{group name}``
   :param filename_template: template for file name (local storage) or log stream name (remote)

   .. py:method:: hook(self)

      Returns AwsLogsHook.


   .. py:method:: set_context(self, ti)

      Provide task_instance context to airflow task handler.

      :param ti: task instance object


   .. py:method:: close(self)

      Close the handler responsible for the upload of the local log file to Cloudwatch.


   .. py:method:: get_cloudwatch_logs(self, stream_name)

      Return all logs from the given log stream.

      :param stream_name: name of the Cloudwatch log stream to get all logs from
      :return: string of all logs from the given log stream



