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

在关联Glue开发端点的AWS SageMaker JupyterLab中展示自定义日志的问题

在SageMaker JupyterLab(关联Glue开发端点)中显示日志到单元格输出

我懂你遇到的问题——用Python logging 模块或者GlueContext的日志器时,日志没法像print那样直接显示在笔记本单元格里,默认都跑到CloudWatch去了对吧?这是因为Glue开发端点的默认日志配置没有把输出定向到笔记本的标准输出(stdout),而print是直接写入stdout的,所以能正常显示。

下面给你两种针对性的解决方法:

方法1:配置Python logging模块输出到单元格

我们可以给日志器添加一个StreamHandler,让日志直接输出到stdout(也就是笔记本单元格),还可以按需移除默认的CloudWatch Handler,避免日志重复发送:

import logging
import sys

# 获取根日志器(或者你自定义的日志器)
logger = logging.getLogger()

# 移除所有默认Handler(如果不想日志再到CloudWatch的话)
for handler in logger.handlers[:]:
    logger.removeHandler(handler)

# 创建指向stdout的StreamHandler
stream_handler = logging.StreamHandler(sys.stdout)
# 设置日志级别(比如DEBUG/INFO/WARNING等)
stream_handler.setLevel(logging.DEBUG)
# 可选:设置日志格式,让输出更清晰
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)

# 将Handler添加到日志器
logger.addHandler(stream_handler)
# 设置日志器的全局级别
logger.setLevel(logging.DEBUG)

# 测试一下
logger.info("这条日志终于能显示在笔记本单元格里啦!")
logger.debug("调试日志也能看到哦~")

方法2:适配GlueContext的日志器

GlueContext的get_logger()返回的其实也是Python logging的日志实例,所以我们可以用同样的思路给它添加StreamHandler:

from pyspark.context import SparkContext
from awsglue.context import GlueContext
import logging
import sys

# 初始化GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
logger = glueContext.get_logger()

# 添加指向stdout的StreamHandler
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.INFO)
# 可选添加格式
formatter = logging.Formatter('%(asctime)s - GlueLogger - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)

logger.addHandler(stream_handler)

# 测试
logger.info("GlueContext的日志现在也能在单元格里显示啦!")

这样配置之后,不管是Python原生的logging还是Glue的日志器,都会把日志直接输出到你的笔记本单元格里,就跟print的效果一样啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:07:28