有谁知道如何抑制所有气流“信息”级日志,但不抑制特定于应用程序实施的日志?

时间:2018-12-07 21:33:48

标签: python airflow

Airflow 1.10.1具有一个名为“ logging_level”的属性,我相信它与Python日志记录级别有关。如果值为INFO或更低,则输出日志太冗长且在部署中不必要。

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

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

static void Main(string[] args)
{
  var i = 9;
  Expression<Func<Product, bool>> where = x => x.Id == i;
  new ExpressionWriterVisitor(Console.Out).Visit(where);
}

想法是,通过将logging_level的airflow.cfg属性从debug更改为info到warning,我可以看到越来越少的气流日志,而只留下我想要的应用程序特定日志。

步骤1:logging_level =调试

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

enter image description here

第2步:logging_level = INFO

按预期,日志不包含调试级别消息。 enter image description here

第3步:logging_level =警告

当我们从INFO转到WARNING时,该文件为空。我期待文件中的警告,错误和严重消息,而其余消息则不受Airflow的抑制,因为日志中不包含高于INFO级别的airflow内容。

enter image description here

第4步:logging_level =错误

再次出现相同的问题,文件为空。我预计会收到错误和严重消息,但文件为空。

enter image description here

请注意,在最后两个屏幕快照中,并不是路径无效,而是Airflow只是显示了日志文件中没有任何内容的文件路径。

所以我的问题是: 1)这仅仅是一个气流错误吗? 2)我使用不正确吗?还是为了抑制生产中INFO及以下版本的气流水平日志,而只保留我的应用程序特定日志,我是否需要做其他事情?

1 个答案:

答案 0 :(得分:1)

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

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