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

如何修改Airflow/Composer的日志级别?

这问题我太熟了——Airflow默认的info级日志确实容易把日志文件撑得满满当当,完全不符合实际排查需求。下面给你几种不同场景下的调整方案,按需选就行:

1. 修改全局日志级别(最常用)

直接调整Airflow的核心配置文件airflow.cfg,找到[logging]区块,修改以下参数:

[logging]
# 全局Airflow日志级别,可选DEBUG/INFO/WARNING/ERROR/CRITICAL
logging_level = WARNING
# 如果用了Flask App Builder(Airflow 2.x默认),还要调整web UI的日志级别
fab_logging_level = WARNING

修改后需要重启Airflow的所有服务(webserver、scheduler、worker)才会生效。

2. 针对单个DAG/任务单独调整

不想全局降低日志级别?可以只给特定DAG或任务设置更严格的日志等级,避免影响其他业务:

from airflow import DAG
from airflow.operators.python import PythonOperator
import logging
from datetime import datetime

# 获取Airflow任务专用的日志器
task_logger = logging.getLogger("airflow.task")

def my_task_logic():
    # 任务内部也可以单独调整日志器级别
    local_logger = logging.getLogger(__name__)
    local_logger.warning("这条警告会被正常输出")
    local_logger.info("这条info日志会被过滤掉")

with DAG(
    dag_id="low_noise_dag",
    start_date=datetime(2024, 1, 1),
    schedule_interval=None
) as dag:
    # 给当前DAG的所有任务统一设置日志级别为WARNING
    task_logger.setLevel(logging.WARNING)
    
    demo_task = PythonOperator(
        task_id="filtered_log_task",
        python_callable=my_task_logic
    )

如果是BashOperator这类非Python算子,同样可以通过调整airflow.task日志器的级别来控制输出。

3. 针对特定组件精准控日志

有时候是Airflow的某个组件(比如DAG处理器、数据库Hook)或者第三方依赖日志刷屏,这时候可以单独给这些日志器设级别,在airflow.cfg的[logging]区块添加:

[logging]
# 限制Postgres Hook的日志级别
logger_postgres.level = WARNING
# 限制Kubernetes Executor的日志输出
logger_kubernetes.level = WARNING
# 保留DAG处理的info日志(如果需要监控DAG加载情况)
logger_dag_processing.level = INFO

Airflow内置了很多带logger_前缀的配置项,对应不同组件的日志器,你可以在配置文件里找到相关注释。

4. 自定义日志配置(进阶玩法)

如果上面的方式不够灵活,比如要自定义日志格式、按级别拆分日志文件,可以用自定义的Python日志配置。首先在airflow.cfg里指定配置类:

[logging]
logging_config_class = my_custom_logging.LOGGING_CONFIG

然后创建my_custom_logging.py文件(要放在Airflow的PYTHONPATH路径下),编写自定义配置:

import logging.config

LOGGING_CONFIG = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "standard": {
            "format": "%(asctime)s | %(levelname)s | %(name)s | %(message)s"
        }
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "standard",
            "level": "WARNING"
        },
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "formatter": "standard",
            "level": "WARNING",
            "filename": "/opt/airflow/logs/airflow_main.log",
            "maxBytes": 10*1024*1024,  # 10MB
            "backupCount": 5
        }
    },
    "root": {
        "handlers": ["console", "file"],
        "level": "WARNING"
    },
    # 单独给特定日志器设置规则
    "loggers": {
        "airflow.task": {
            "level": "WARNING",
            "handlers": ["console", "file"],
            "propagate": False
        },
        "airflow.dag_processing": {
            "level": "INFO",
            "handlers": ["console", "file"],
            "propagate": False
        }
    }
}

这种方式能完全掌控日志的输出逻辑,适合复杂的日志管理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:51