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

AWS Glue日志问题:Logger.info输出至错误日志组而非输出日志组

AWS Glue日志异常:Logger日志输出至错误日志组而非输出日志组

问题描述

使用Glue Logger打印的日志全部进入CloudWatch错误日志组,而print语句的内容能正常输出到输出日志组。涉及代码如下:

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
logger = glueContext.get_logger()
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

logger.info("Started Processing")

原因分析

AWS Glue默认的Logger配置基于Log4j,且默认将所有级别日志绑定到System.err(错误输出流),因此会被CloudWatch归类到错误日志组;而print语句直接输出到System.out(标准输出流),所以能进入输出日志组。

解决方法

方法1:通过作业参数+自定义Log4j配置文件

  1. 打开AWS Glue控制台,找到目标作业并进入编辑页面
  2. 切换到「安全配置、脚本库和作业参数(可选)」区域
  3. 在「作业参数」中添加:
    • 键:--conf
    • 值:spark.driver.extraJavaOptions=-Dlog4j.configuration=file:///tmp/log4j.properties spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///tmp/log4j.properties
  4. 在Glue脚本开头添加代码,生成自定义Log4j配置文件到/tmp目录:
import os

# 定义Log4j配置内容,将日志输出到System.out
log4j_conf = """
log4j.rootLogger=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
"""

# 写入配置文件到/tmp目录
with open('/tmp/log4j.properties', 'w') as f:
    f.write(log4j_conf)

方法2:脚本内动态修改Log4j配置

无需修改作业参数,直接在脚本中调整Log4j的输出目标:

from py4j.java_gateway import java_import

# 导入Log4j相关Java类
java_import(spark._jvm, 'org.apache.log4j.Logger')
java_import(spark._jvm, 'org.apache.log4j.ConsoleAppender')
java_import(spark._jvm, 'org.apache.log4j.PatternLayout')
java_import(spark._jvm, 'org.apache.log4j.Level')

# 获取根Logger实例
root_logger = spark._jvm.Logger.getRootLogger()

# 移除所有默认的Appender
for appender in root_logger.getAllAppenders():
    root_logger.removeAppender(appender)

# 创建输出到System.out的ConsoleAppender
console_appender = spark._jvm.ConsoleAppender()
pattern_layout = spark._jvm.PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n")
console_appender.setLayout(pattern_layout)
console_appender.setTarget("System.out")
console_appender.activateOptions()

# 将新Appender添加到根Logger并设置日志级别
root_logger.addAppender(console_appender)
root_logger.setLevel(spark._jvm.Level.INFO)

配置完成后,logger.info()等日志会输出到System.out,从而进入CloudWatch的输出日志组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:12:35