【问题标题】:Writing to Airflow Logs写入气流日志
【发布时间】:2017-02-28 10:47:05
【问题描述】:

在 Airflow 中写入日志的一种方法是从 PythonOperator 返回一个字符串,例如第 44 行 here

还有其他方法可以让我写入气流日志文件吗?我发现打印语句没有保存到日志中。

【问题讨论】:

标签: airflow


【解决方案1】:

您可以使用一个记录器混合类:

https://github.com/apache/airflow/blob/main/airflow/utils/log/logging_mixin.py

from airflow.utils.log.logging_mixin import LoggingMixin

LoggingMixin().log.info("Hello")

然后在气流日志中你会看到:

[2021-07-07 15:55:42,370] {{logging_mixin.py:112}} INFO - Hello

【讨论】:

    【解决方案2】:

    您可能会使用气流记录器

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

    【讨论】:

    • 在这种情况下日志会去哪里?当我从未连接到任何 DAG 或任务的独立 python 脚本进行日志记录时会发生什么?
    • 您通过调用logging.getLogger("airflow.task") 要求 Airflow 提供由 Airflow 配置的记录器。日志转到airflow.cfg 文件中指定的目录
    • Airflow 的预配置记录器仅针对由气流启动的进程和由主进程启动的所有线程返回。它不适用于新进程(为新进程创建新的默认记录器)。但它确实适用于由同一进程启动的新线程。
    【解决方案3】:

    您可以将日志记录模块导入您的代码并以这种方式写入日志

    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')
    

    【讨论】:

    • 这是否适用于“信息”以外的任何内容?当我的警告级别为“信息”时,我让它工作,但后来我尝试将气流.cfg logging_level 设置为 WARNING 和 ERROR 并尝试使用 logging.warning('my message') 和 logging.error('my message') ,或者这两件事都没有奏效。可悲的是,气流日志非常冗长,我不想用冗余信息向我的日志发送垃圾邮件。我更喜欢只写出带有“INFO”的自定义应用程序消息,而不是让日志中的所有杂乱无章。不确定 Airflow 1.10.1 是否尚不支持此功能?
    • 我仍在试图弄清楚为什么我可能会使用 logging.info 而不是打印(用于简单的调试目的或读取有关 DAG 执行的信息)。
    • 好点 @theStud54 - 支持这一点,在我的情况下,打印语句最终会作为 INFO 级别的日志语句。
    • 我的“logging.info”未显示在日志中。另一方面是打印语句
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2020-05-08
    • 2021-04-17
    • 2019-05-18
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2022-10-11
    相关资源
    最近更新 更多