【问题标题】:Does anyone know how to suppress all airflow "info" level logs, but not suppress application implementation specific logs?有谁知道如何抑制所有气流“信息”级别的日志,但不抑制应用程序实现特定的日志?
【发布时间】:2018-12-07 21:33:48
【问题描述】:

Airflow 1.10.1 有一个名为“logging_level”的属性,我认为它与 Python 日志记录级别相关。当值为 INFO 或更低时,输出日志过于冗长,在部署中是不必要的。

相反,我希望能够仅记录气流框架错误,以及我希望我的应用程序记录的所有内容。然后我将日志记录减少到最低限度,大多数只是在应用程序的上下文中,并且只保留气流框架/执行错误。

在一个特定的 PythonOperator 中,我编写了 5 个不同级别的日志,以查看当我修改airflow.cfg logging_level 时它们会发生什么。

logging.debug('******************* HELLO debug *******************')
logging.info('******************* HELLO info *******************')
logging.warning('******************* HELLO warning *******************')
logging.error('******************* HELLO error *******************')
logging.critical('******************* HELLO critical *******************')

这个想法是通过将 logging_level 的气流.cfg 属性从调试更改为信息到警告,我可以看到越来越少的气流日志,而只留下我想要的应用程序特定日志。

第 1 步:logging_level = 调试

这是从调试向上具有所有级别日志的任务的日志。

第 2 步:logging_level = INFO

正如预期的那样,日志不包含调试级别消息。

第 3 步:logging_level = 警告

当我们从 INFO 上升到 WARNING 时,文件是空的。我期待文件中的警告、错误和关键消息,而其余消息则被 Airflow 抑制,因为日志不包含来自 INFO 以上级别的气流的任何内容。

第 4 步:logging_level = 错误

这里又是同样的问题,文件是空的。我希望收到错误和关键消息,但文件是空的。

注意,在最后两张截图中,并不是路径无效,而是Airflow只是在日志文件中没有任何内容的情况下显示文件的路径。

所以我的问题是: 1)这只是一个气流错误吗? 2)我没有正确使用它吗?或者我是否需要执行其他操作以在生产中抑制来自 INFO 及以下信息的 Airflow 级别日志,并仅保留我的应用程序特定日志?

【问题讨论】:

    标签: python airflow


    【解决方案1】:

    如果您在日志屏幕截图中注意到您的日志消息实际上包含在信息日志中。如果您想实际更改任务日志中的日志级别而不是包装它,您可以从任务实例中提取日志(来自 **kwargs)并直接使用它,而不是一般调用 logging.warning()。 这是一个例子:

    def your_python_callable(**kwargs):
        log = kwargs["ti"].log
        log.warning("******HELLO Debug******")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多