Cloud Composer 3升级后Airflow日志换行显示为\n问题求助
GCP Cloud Composer 3(Airflow 2.10.2-build.5)多行日志显示为单行的解决配置方案
升级至Cloud Composer 3及Airflow 2.10.2-build.5版本后,日志中的换行符\n被直接显示为文本而非解析成实际换行,所有多行日志内容被压缩为单行,示例:
INFO - \n print: This is a print\n Multiline\n To see how it appears\n
以下是针对该问题的配置修复方案:
方案一:调整Airflow默认日志格式
在Cloud Composer环境的Airflow配置中添加以下配置项:
- 配置键:
logging.format - 配置值:
%(asctime)s - %(name)s - %(levelname)s - %(message)s
该配置会覆盖默认的日志格式化规则,确保日志消息中的换行符被正确解析,而非转义为文本显示。
方案二:自定义日志配置类(适用于方案一不生效的场景)
- 创建自定义日志配置脚本
custom_logging_config.py,内容如下:
from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG def get_custom_logging_config(): config = DEFAULT_LOGGING_CONFIG.copy() # 替换默认格式化器,确保消息不被转义 for handler_name, handler in config['handlers'].items(): if handler.get('formatter') == 'airflow': handler['formatter'] = 'custom_airflow' # 定义自定义格式化器 config['formatters']['custom_airflow'] = { 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s', 'class': 'logging.Formatter' } return config
- 将该脚本上传至Cloud Composer的DAG存储桶(如
gs://{your-composer-bucket}/dags/路径) - 在Cloud Composer的Airflow配置中添加:
- 配置键:
logging.config_class - 配置值:
custom_logging_config.get_custom_logging_config
- 配置键:
补充说明
Cloud Composer 3默认集成Cloud Logging,需确保Cloud Logging处理器未对日志消息进行转义。若使用Cloud Logging专属配置,需保证json_fields中的message字段直接映射原始日志内容,不做转义处理。
内容的提问来源于stack exchange,提问作者Leonardo Campos
相关产品推荐
相关产品推荐

