将日志添加到 Airflow 日志
Adding logs to Airflow Logs
如何将我自己的日志添加到自动生成的 Apache Airflow 日志中?任何打印语句都不会在那里记录,所以我想知道如何添加我的日志以便它也显示在 UI 上?
如果您查看 PythonOperator:https://github.com/apache/incubator-airflow/blob/master/airflow/operators/python_operator.py#L80-L81,似乎无法将 STDOUT/STDERR 从 python 可调用记录到气流日志中。
但是,如果您查看 BashOperator:https://github.com/apache/incubator-airflow/blob/master/airflow/operators/bash_operator.py#L79-L94,其中的 STDOUT/STDERR 会与气流日志一起记录。因此,如果日志对您很重要,我建议在单独的文件中添加 python 代码并使用 BashOperator 调用它。
我认为您可以通过使用日志记录模块并将配置委托给 Airflow 来解决这个问题。
类似于:
import ...
dag = ...
def print_params_fn(**kwargs):
import logging
logging.info(kwargs)
return None
print_params = PythonOperator(task_id="print_params",
python_callable=print_params_fn,
provide_context=True,
dag=dag)
在 python 可调用的 PythonOperator 中,您可以使用:
import logging
LOGGER = logging.getLogger("airflow.task")
LOGGER.info("airflow.task >>> 2 - INFO logger test")
这将产生如下正确的输出:
[2019-12-26 09:42:55,813] {operations.py:86} INFO - airflow.task >>> 2 - INFO logger test
对于自定义记录器的情况:
LOGGER = logging.getLogger(__name__)
LOGGER.info("__name__ >>> 2 - INFO logger test")
您将得到重复的格式:
[2019-12-26 09:42:55,813] {logging_mixin.py:112} INFO - [2019-12-26 09:42:55,813] {operations.py:79} INFO - __name__ >>> 2 - INFO logger test
如何将我自己的日志添加到自动生成的 Apache Airflow 日志中?任何打印语句都不会在那里记录,所以我想知道如何添加我的日志以便它也显示在 UI 上?
如果您查看 PythonOperator:https://github.com/apache/incubator-airflow/blob/master/airflow/operators/python_operator.py#L80-L81,似乎无法将 STDOUT/STDERR 从 python 可调用记录到气流日志中。
但是,如果您查看 BashOperator:https://github.com/apache/incubator-airflow/blob/master/airflow/operators/bash_operator.py#L79-L94,其中的 STDOUT/STDERR 会与气流日志一起记录。因此,如果日志对您很重要,我建议在单独的文件中添加 python 代码并使用 BashOperator 调用它。
我认为您可以通过使用日志记录模块并将配置委托给 Airflow 来解决这个问题。
类似于:
import ...
dag = ...
def print_params_fn(**kwargs):
import logging
logging.info(kwargs)
return None
print_params = PythonOperator(task_id="print_params",
python_callable=print_params_fn,
provide_context=True,
dag=dag)
在 python 可调用的 PythonOperator 中,您可以使用:
import logging
LOGGER = logging.getLogger("airflow.task")
LOGGER.info("airflow.task >>> 2 - INFO logger test")
这将产生如下正确的输出:
[2019-12-26 09:42:55,813] {operations.py:86} INFO - airflow.task >>> 2 - INFO logger test
对于自定义记录器的情况:
LOGGER = logging.getLogger(__name__)
LOGGER.info("__name__ >>> 2 - INFO logger test")
您将得到重复的格式:
[2019-12-26 09:42:55,813] {logging_mixin.py:112} INFO - [2019-12-26 09:42:55,813] {operations.py:79} INFO - __name__ >>> 2 - INFO logger test