| Rename the ``name`` attribute of the StackdriverTaskHandler to ``gcp_log_name`` to avoid name overriding by the the ``DictConfigurator``. |
| |
| Airflow relies on the ``logging.config.dictConfig`` (`documentation <https://docs.python.org/3/library/logging.config.html>`_) method |
| to `setup the logging stack <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/logging_config.py#L69>`_. |
| However, during this setup, it iterates through the handlers and |
| `explicitly sets their name <https://github.com/python/cpython/blob/2a4cbf17af19a01d942f9579342f77c39fbd23c4/Lib/logging/config.py#L578>`_: |
| |
| .. code-block:: python |
| |
| for name in sorted(handlers): |
| try: |
| handler = self.configure_handler(handlers[name]) |
| handler.name = name |
| handlers[name] = handler |
| except Exception as e: |
| # [...] |
| pass |
| |
| So, before this fix: |
| |
| #. You setup the remote logging through the environment variables ``AIRFLOW__LOGGING__REMOTE_LOGGING="true"`` and ``AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER="stackdriver://host/path"``. |
| #. Airflow instantiates a ``StackdriverTaskHandler`` with the name of ``"path"`` |
| #. **BUT** the ``dictConfig`` call overrides the name of the handler with the key of the handlers configuration (i.e. `task <https://github.com/apache/airflow/blob/a58441ca1b263cae61a5bb653e6839f0dd29b08e/airflow/config_templates/airflow_local_settings.py#L350>`_). |
| #. Hence, the next calls to the ``emit`` method of the handler will generate logs to the wrong destination (``task`` instead of ``path``). |
| |
| Changing the field, from ``name`` to ``gcp_log_name`` prevents the overriding from the dictConfig. |