我正在开发一个程序包,其他人将使用该程序包编写处理脚本。为了测试/调试/避免疯狂,我想在代码中包含一些日志记录语句,尤其是使用为另一个项目开发的logging_setup()
实用程序函数来进行格式化/文件输出控制。 / p>
但是,由于我不是在编写一个自包含的应用程序,而是要由其他程序调用的库,因此我在应该使用logging_setup()
实用程序才能生成所需的库时感到困惑记录我想要的结果。这使我想知道在程序包中使用日志记录系统是否是一个好主意。
logging_setup()
实用程序在哪里可以使用?
编辑:这是我上面提到的功能:
def logging_setup(cfg_path=definitions.LOG_CONFIG_PATH, lvl=logging.INFO):
"""Setup logging tool from YAML configuration file.
This should only be run once. Formatted (or configured) logging can only be
done from within functions/classes in other modules.
"""
# create directory for log files if not already there
try:
os.makedirs(definitions.LOGS_PATH)
except OSError as e:
if e.errno != errno.EEXIST:
raise
# configure logging from yaml config file
if os.path.exists(cfg_path):
with open(cfg_path, 'rt') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
else:
logging.basicConfig(level=lvl)
答案 0 :(得分:5)
logging_setup()
实用程序在哪里可以使用?
在库代码中,您不应在任何地方配置日志记录。由库的用户(应用程序分发者)配置日志记录处理程序。
作为库作者,您对运行时上下文一无所知,甚至都不知道是否有可写文件系统可用于创建日志文件。但是,要使用 logging
,您无需关心配置-只需import logging
并在模块级别创建记录器,就可以从库代码中记录事件。库代码不是要决定这些日志事件在何处-或它们是否会随处可见。
如果要提供 app 并希望记录输出,则将记录配置为应用程序启动时要做的第一件事-通常在Python中,这意味着调用logging.config.dictConfig
进入main()
函数后不久进行了类似操作(请确保在import
时没有进行日志记录配置。)