Python 日志记录模块在 Sagemaker 中不起作用



我有一个运行jupyter笔记本的sagemaker实例。我想使用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实例添加任何内容才能正常工作吗?

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

# 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((函数(文档(。这将在根记录器级别设置日志记录级别和STDOUT处理程序,该处理程序将传播到在同一代码中创建的任何子记录器。以下是使用所提供代码的示例:

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

最新更新