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

如何在AWS Glue中向输出日志写入调试信息?

解决AWS Glue调试日志写入output日志的问题

我来帮你搞定这个日志输出的问题——AWS Glue默认确实会把print()的内容丢进error日志,因为它的Python环境里默认把stdout重定向到stderr了,而且有时候测试的日志还会因为配置或延迟不显示,下面给你几个靠谱的解决方案:

方法一:用Python logging模块(推荐,规范且可控)

这是最稳妥的方式,直接把日志定向到stdout,这样就会自动进入/aws-glue/jobs/output日志组。直接在脚本开头加这段配置:

import logging
import sys

# 获取全局logger,设置日志级别为INFO(可以根据需要改成DEBUG)
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 移除默认handler,避免重复输出到error日志
for handler in logger.handlers[:]:
    logger.removeHandler(handler)

# 创建一个输出到stdout的handler
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)

# 可选:设置日志格式,方便排查问题
formatter = logging.Formatter('%(asctime)s - %(module)s - %(levelname)s: %(message)s')
stdout_handler.setFormatter(formatter)

# 把handler添加到logger
logger.addHandler(stdout_handler)

# 现在用logger输出调试信息,就会出现在output日志里
logger.info("Hello World!")

方法二:重定向sys.stdout到正确流

如果你就想用print(),可以手动把stdout改回Glue的标准输出流,这样print的内容就会进output日志:

import sys

# 重定向stdout到系统原生的stdout流
sys.stdout = sys.__stdout__

# 现在print的内容就会写入/aws-glue/jobs/output
print("Hello World!")

额外排查点(解决测试日志不显示的问题)

如果你的"Hello World!"还是没出现在日志里,检查这几点:

  • 日志延迟:CloudWatch日志有时候会有1-5分钟的延迟,别急着刷新,等几分钟再看
  • 日志级别配置:在Glue作业的配置页面,找到"日志级别"选项,确保设置为INFO或DEBUG(如果设成ERROR,低级别的日志会被过滤)
  • 代码执行路径:确认你的调试语句确实被执行到了——比如有没有被条件分支跳过,或者作业在执行到这段代码前就失败了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:22:04