Airflow本地部署中DAG成功回调函数print输出日志位置查询
解决Airflow DAG回调函数print日志找不到的问题
核心原因
Airflow的DAG级回调函数(如on_success_callback)运行在Scheduler进程中,但默认情况下,Scheduler的日志不会自动写入~/airflow/logs/scheduler目录,且原生print语句的输出无法被Airflow日志系统捕获,导致你找不到对应输出。
具体解决步骤
1. 替换print为Airflow官方日志记录器
放弃使用print,改用Airflow内置的日志对象,确保输出被纳入Airflow日志体系:
from airflow.utils.log.logging_mixin import LoggingMixin def dag_success_alert(context): logger = LoggingMixin().log logger.info("=== DAG成功回调上下文开始 ===") logger.info(f"Context所有键: {list(context.keys())}") for key in context.keys(): logger.info(f"当前键: {key}") try: logger.info(f"{key}的内容: {context[key].__dict__}") except Exception as e: logger.info(f"解析{key}失败: {str(e)}") logger.info("=== DAG成功回调上下文结束 ===")
2. 定位正确的日志位置
- Scheduler进程日志:如果用systemd管理Airflow,直接通过
journalctl -u airflow-scheduler查看;如果是终端直接启动Scheduler,日志会输出在启动终端,也可以手动指定日志文件启动:airflow scheduler --log-file ~/airflow/logs/scheduler/scheduler.log - DAG运行日志:回调日志也会同步出现在Airflow UI的DAG运行记录中——进入UI找到目标DAG的运行实例,点击查看日志即可看到回调输出。
3. 检查并修正airflow.cfg日志配置
确保以下配置项正确,修改后需重启Scheduler和Webserver:
[logging] # 日志级别保持INFO即可,无需强制改DEBUG logging_level = INFO # 确认日志目录路径正确且存在 base_log_folder = ~/airflow/logs # 开启任务实例日志捕获 task_log_reader = task
4. 验证日志目录权限
确保Airflow运行用户拥有日志目录的读写权限:
chown -R $USER:$USER ~/airflow/logs chmod -R 755 ~/airflow/logs
内容的提问来源于stack exchange,提问作者ARCrow
相关产品推荐
相关产品推荐

