首页 > 解决方案 > 看不到从 BashOperator 执行的 python 函数的日志 - Airflow

问题描述

我正在使用 apache 气流BashOperator。每个BashOperator执行一个 python 脚本。例如:

from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator
with DAG(dag_id='dag_example', default_args=None,
             schedule_interval='0 2 */2 * *',
             catchup=False) as dag:

     run_task= BashOperator(
            task_id='simple_task',
            bash_command='python task.py',
            dag=dag)

在哪里task.py

import logging

def log_fun():
    logging.info('Log something')

if __name__=='__main__':
     log_fun()

我无法弄清楚为什么日志没有出现在 Airflow 日志中。我检查airflow.cfg并 logging_level 正确设置为 INFO。

标签: pythonairflow

解决方案


AirflowBashOperator将在不同的进程中运行您的 python 脚本,该进程不会读取您的airflow.cfg. 因为默认日志级别是WARN日志不会出现在标准输出中,因此不会出现在您的 Airflow 日志中。

例子:

$ cat task.py
import logging

def log_fun():
    logging.info('Log something')

if __name__=='__main__':
     log_fun()
$ python task.py
$ 

如果您在 Python 文件中显式添加日志级别,则会显示日志:

$ cat task2.py
import logging
logging.basicConfig(level=logging.DEBUG)

def log_fun():
    logging.info('Log something')

if __name__=='__main__':
     log_fun()
$ python task2.py
INFO:root:Log something
$ 

话虽如此,我认为更好的解决方案是使用 aPythonOperator而不是 a BashOperator。它应该使用您在您的设置中设置的相同日志记录配置,airflow.cfg因为它不会在单独的进程中运行。


推荐阅读