Python日志模块在Sagemaker中不工作

2024-04-24 15:05:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个sagemaker实例运行jupyter笔记本。我想使用python的日志模块写入日志文件,但它不起作用

我的代码非常简单:

import logging

logger = logging.getLogger()
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s", datefmt="%y/%m/%d %H:%M:%S")
fhandler = logging.FileHandler("taxi_training.log")
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)

logger.debug("starting log...")

这应该会在我的文件taxi_training.log中写一行,但它没有

我尝试使用importlib中的reload函数,还尝试显式地将输出流设置为sys.stdout。没有任何内容记录到文件或cloudwatch中

我是否需要向我的Sagemaker实例添加任何内容才能正常工作


Tags: 模块文件实例代码log内容formatterlogging
1条回答
网友
1楼 · 发布于 2024-04-24 15:05:27

Python日志模块需要一个日志级别和一个或多个处理程序来处理输出。默认情况下,日志记录级别设置为警告(30),并使用该级别的标准输出处理程序。如果未明确定义日志级别和/或处理程序,则这些设置将从父根日志记录器设置继承。可以通过在代码底部添加以下行来验证这些设置:

# Verify levels and handlers
print("Parent Logger: "+logger.parent.name)
print("Parent Level: "+str(logger.parent.level))
print("Parent Handlers: "+str(logger.parent.handlers))
print("Logger Level: "+str(logger.level))
print("Logger Handlers: "+str(logger.handlers))

实例化处理程序和设置日志级别的最简单方法是运行logging.basicConfig()函数(文档)。这将在根记录器级别设置日志记录级别和标准输出处理程序,它将传播到在同一代码中创建的任何子记录器。下面是使用提供的代码的示例:

import logging

logger = logging.getLogger('log')
logging.basicConfig(level=logging.INFO) # Set logging level and STDOUT handler

logger.info(5)

相关问题 更多 >