:py:mod:`airflow.providers.microsoft.azure.log.wasb_task_handler`
=================================================================

.. py:module:: airflow.providers.microsoft.azure.log.wasb_task_handler


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.microsoft.azure.log.wasb_task_handler.WasbTaskHandler




.. py:class:: WasbTaskHandler(base_log_folder, wasb_log_folder, wasb_container, filename_template, delete_local_copy)

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

   WasbTaskHandler is a python log handler that handles and reads
   task instance logs. It extends airflow FileTaskHandler and
   uploads to and reads from Wasb remote storage.

   .. py:method:: hook(self)

      Returns WasbHook.


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

      Provide task_instance context to airflow task handler.

      :param ti: task instance object


   .. py:method:: close(self)

      Close and upload local log file to remote storage Wasb.


   .. py:method:: wasb_log_exists(self, remote_log_location)

      Check if remote_log_location exists in remote storage

      :param remote_log_location: log's location in remote storage
      :return: True if location exists else False


   .. py:method:: wasb_read(self, remote_log_location, return_error = False)

      Returns the log found at the remote_log_location. Returns '' if no
      logs are found or there is an error.

      :param remote_log_location: the log's location in remote storage
      :param return_error: if True, returns a string error message if an
          error occurs. Otherwise returns '' when an error occurs.


   .. py:method:: wasb_write(self, log, remote_log_location, append = True)

      Writes the log to the remote_log_location. Fails silently if no hook
      was created.

      :param log: the log to write to the remote_log_location
      :param remote_log_location: the log's location in remote storage
      :param append: if False, any existing log file is overwritten. If True,
          the new log is appended to any existing logs.



