You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow 1.9日志冗余问题:如何恢复1.7.1.3的简洁日志格式?

Airflow 1.9日志问题解决方案

刚好我之前也处理过Airflow 1.x版本升级后的日志冗余问题,给你梳理一下对应的解决方案和知识点:

1. 如何恢复旧版简洁日志(隐藏base_task_runner日志)

Airflow 1.9里base_task_runner的日志来自airflow.task_runner这个logger,默认级别是INFO,所以会输出大量任务启动、执行环节的冗余日志。要回到1.7.1.3的简洁风格,核心是把这个logger的级别调高,过滤掉INFO级别的内容:

  • 快速调整(部分版本适用):直接在airflow.cfg的[logging]区块添加一行:

    logger_airflow.task_runner = WARNING
    

    保存后重启Airflow服务,这样只有base_task_runner的警告和错误日志会显示,INFO级别的启动日志就被过滤了。

  • 可靠自定义配置:如果上面的方法不生效,就需要自定义日志配置:

    1. 新建一个Python文件(比如custom_log_config.py),参考Airflow默认的日志配置(可以从Airflow源码的airflow.config_templates.default_logging模块里找到默认的LOGGING_CONFIG),复制到自己的文件中。
    2. 在配置的loggers部分,添加或修改airflow.task_runner的配置:
      'airflow.task_runner': {
          'level': 'WARNING',
          'handlers': ['task'],
          'propagate': False,
      },
      
    3. 在airflow.cfg中指定自定义配置:
      logging_config_class = custom_log_config.LOGGING_CONFIG
      
    4. 重启Airflow服务,之后任务日志就只会保留Bash Operator的执行内容了。

2. log_format与simple_log_format的区别

这两个参数控制的是日志输出的格式细节,核心差异在信息丰富度上:

  • log_format:是Airflow默认使用的详细格式,包含了日志产生的时间戳、logger名称、日志级别、进程/线程ID以及核心消息,比如默认格式可能是:

    %(asctime)s - %(name)s - %(levelname)s - %(message)s
    

    这种格式适合持久化存储,方便后续排查问题时定位日志来源和上下文。

  • simple_log_format:是简化版格式,只保留最核心的信息,通常是时间戳、日志级别和消息内容,比如:

    %(asctime)s %(levelname)s %(message)s
    

    它去掉了logger名称、进程ID等冗余信息,输出更简洁,适合在控制台快速预览日志,或者不需要太多上下文的场景。

3. 本地存储日志是否需要配置logging_config_class

默认情况下不需要,Airflow自带的默认日志配置已经完全支持本地文件存储,日志会自动存放在airflow.cfg中base_log_folder指定的目录下,无需额外配置。

只有当你有以下自定义需求时,才需要配置logging_config_class:

  • 调整特定logger的日志级别(比如第一个问题中过滤base_task_runner的日志);
  • 修改日志输出格式(自定义log_format或simple_log_format的内容);
  • 添加额外的日志处理器(比如同时输出到文件和控制台,或者对接外部日志系统);
  • 调整日志的滚动策略、保留期限等存储规则。

内容的提问来源于stack exchange,提问作者user974514

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:27:49