写入Airflow日志

66

在Airflow中写入日志的一种方法是从PythonOperator中返回一个字符串,就像这里第44行所示。

是否还有其他方式可以让我写入Airflow日志文件?我发现使用print语句无法保存到日志中。


3
可能是在Airflow日志中添加日志的重复问题。 - SergiyKolesnikov
3个回答

84

你可以将日志模块导入到你的代码中,然后通过这种方式写入日志

import logging

logging.info('Hello')

这里有更多选择

import logging    

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

9
除了"info"之外,这个方法适用于其他内容吗?当我的警告级别是 "info" 时,我成功地运行了它,但是当我尝试将airflow.cfg中的logging_level设置为WARNING和ERROR并使用logging.warning('my message')和logging.error('my message')时,这两件事情都不起作用。不幸的是,Airflow日志非常冗长,我不想在日志中重复记录冗余信息。我更喜欢使用“INFO”输出自定义应用程序消息,而不会获得日志中的所有杂乱信息。不确定这是否已经被Airflow 1.10.1支持? - Mark
2
我仍在努力弄清楚为什么在简单调试或读取有关DAG执行的信息时,我可能会使用logging.info而不是print。 - theStud54
好观点@theStud54 - 为了支持这一点,在我的情况下,打印语句最终成为INFO级别的日志语句。 - cellepo
2
我的“logging.info”没有显示在日志中。另一方面,打印语句是可以的。 - CutePoison

18

你可以使用Airflow日志记录器

import logging


logger = logging.getLogger("airflow.task")
logger.error("Your custom error")

1
在这种情况下,日志将会去哪里?当我从一个独立的Python脚本中记录日志时,该脚本没有连接到任何DAG或任务,会发生什么? - Abhishek Dalvi
2
您可以通过调用logging.getLogger("airflow.task")来要求Airflow提供由Airflow配置的记录器。日志将保存在airflow.cfg文件中指定的目录中。 - Heedge
1
Airflow的预配置记录器仅适用于由Airflow启动的进程和主进程启动的所有线程。它不适用于新进程(为新进程创建了一个新的默认记录器)。但是,对于由同一进程启动的新线程,它确实有效。 - Heedge

8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接