This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-6-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 0162867d9427deaff7feaa56497abafa44aa54f2 Author: Jarek Potiuk <[email protected]> AuthorDate: Thu Apr 20 02:18:44 2023 +0200 Better explanation on how to log from tasks (#30746) * Better explanation on how to log from tasks After Daniel's explanation this should provide a better description on how to log from tasks. Co-authored-by: Daniel Standish <[email protected]> Co-authored-by: Niko Oliveira <[email protected]> (cherry picked from commit 82ba645abb46c12f6b81e4df2af94abe2fc03fea) --- .../logging-monitoring/logging-tasks.rst | 36 ++++++++++------------ 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/docs/apache-airflow/administration-and-deployment/logging-monitoring/logging-tasks.rst b/docs/apache-airflow/administration-and-deployment/logging-monitoring/logging-tasks.rst index b43b858ac9..16b2b58e98 100644 --- a/docs/apache-airflow/administration-and-deployment/logging-monitoring/logging-tasks.rst +++ b/docs/apache-airflow/administration-and-deployment/logging-monitoring/logging-tasks.rst @@ -57,34 +57,30 @@ In addition, you can supply a remote location to store current logs and backups. Writing to task logs from your code ----------------------------------- -Most operators will write logs to the task log automatically. This is because they derive from they -have a ``log`` logger that you can use to write to the task log. -This logger is created and configured by :class:`~airflow.utils.log.LoggingMixin` that all classic -operators derive from. +Airflow uses standard the Python `logging <https://docs.python.org/3/library/logging.html>`_ framework to +write logs, and for the duration of a task, the root logger is configured to write to the task's log. -If you want to log to the task log from a custom class of yours you can do the following: +Most operators will write logs to the task log automatically. This is because they +have a ``log`` logger that you can use to write to the task log. +This logger is created and configured by :class:`~airflow.utils.log.LoggingMixin` that all +operators derive from. But also due to the root logger handling, any standard logger (using default settings) that +propagates logging to the root will also write to the task log. -* make sure your class extends from :class:`~airflow.utils.log.LoggingMixin` -* just use standard print statements to print to stdout -* use the ``airflow.task`` logger that is configured by default or create logger where ``airflow.task`` is - the parent logger +So if you want to log to the task log from custom code of yours you can do any of the following: -The last option is the most flexible, as you can create your own logger and configure it as you see fit -via advanced configuration options below. +* Log with the ``self.log`` logger from BaseOperator +* Use standard ``print`` statements to print to ``stdout`` (not recommended, but in some cases it can be useful) +* Use the standard logger approach of creating a logger using the Python module name + and using it to write to the task log -Using task logger directly: +This is the usual way loggers are used directly in Python code: .. code-block:: python - logger = logging.getLogger("airflow.task") - logger.info("This is a log message") - -Using child logger of task logger: + import logging -.. code-block:: python - - child_logger = logging.getLogger("airflow.task.child") - child_logger.info("This is a child log message") + logger = logging.getLogger(__name__) + logger.info("This is a log message") Interleaving of logs
