Python 在包中进行日志记录
我正在开发一个包,其他人将使用它来编写处理脚本。出于测试/调试/不疯狂的目的,我想在代码中包含一些日志语句,尤其是使用我为另一个项目开发的用于格式化/文件输出控制的Python 在包中进行日志记录,python,logging,Python,Logging,我正在开发一个包,其他人将使用它来编写处理脚本。出于测试/调试/不疯狂的目的,我想在代码中包含一些日志语句,尤其是使用我为另一个项目开发的用于格式化/文件输出控制的logging\u setup()实用程序函数 但是,因为我不是在编写一个自包含的应用程序,而是一个要由其他程序调用的库,所以我不知道应该在哪里使用logging\u setup()实用程序来生成所需的日志结果。这让我怀疑在我的包中使用日志系统是否是一个好主意 我应该在哪里使用我的logging\u setup()实用程序(如果有)
logging\u setup()
实用程序函数
但是,因为我不是在编写一个自包含的应用程序,而是一个要由其他程序调用的库,所以我不知道应该在哪里使用logging\u setup()
实用程序来生成所需的日志结果。这让我怀疑在我的包中使用日志系统是否是一个好主意
我应该在哪里使用我的logging\u 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)
我应该在哪里使用我的logging\u setup()
实用程序(如果有)
在库代码中,不应在任何地方配置日志记录。由库的用户(应用程序分发服务器)配置日志处理程序
作为库作者,您对运行时上下文一无所知,甚至不知道是否有一个可写的文件系统可用于创建日志文件。但是要使用日志记录
,您不需要关心配置-只需在模块级别导入日志记录并创建日志记录程序,就可以从库代码记录事件。不是由库代码来决定这些日志事件的去向——或者它们是否去了任何地方
如果您正在提供一个应用程序,并且想要日志输出,那么将日志配置为应用程序启动时的第一件事—通常在Python中,这意味着在进入main()
函数后不久将调用logging.config.dictConfig
或类似的函数(请确保日志配置不会在导入时发生)
我应该在哪里使用我的logging\u setup()
实用程序(如果有)
在库代码中,不应在任何地方配置日志记录。由库的用户(应用程序分发者)配置日志记录处理程序
作为库作者,您对运行时上下文一无所知,甚至不知道是否有可写文件系统可用于创建日志文件。但是要使用日志记录
,您不需要关心配置-只需在模块级别导入日志记录并创建日志记录程序,就可以记录ev不是由库代码来决定这些日志事件去哪里,或者它们是否去了任何地方
如果您正在提供一个应用程序,并且想要日志输出,那么将日志配置为应用程序启动时的第一件事—通常在Python中,这意味着在进入
main()
函数后不久将调用logging.config.dictConfig
或类似的函数(请确保日志配置不会在导入时发生。do?除非你想展示一个示例设置并解释你想要的行为,否则你的要求很不清楚。@wim.很公平。如果用户需要日志记录,就让他们调用你的函数。库不应该干扰根日志记录程序;这只供顶级脚本使用。你的包应该有自己的日志记录程序,用logging.getLogger(\uuuuu name\uuuuuuuuuuuuuuuuuuuuuuu)
,您所做的任何配置都应该只应用于该配置。logging\u setup()的具体功能是什么
do?除非你想展示一个示例设置并解释你想要的行为,否则你的要求很不清楚。@wim.很公平。如果用户需要日志记录,就让他们调用你的函数。库不应该干扰根日志记录程序;这只供顶级脚本使用。你的包应该有自己的日志记录程序,用logging.getLogger(uuu name_uuuuu)
,您所做的任何配置都应该只应用于此。有关此位置的一些支持,请参阅下面的说明。在我的另一个项目(一个自包含的应用程序)中,我使用相同的功能来加速正确的日志配置(用于我想要做的事情)。我正在考虑如何在这里使用相同的配置,但这个答案正是我想要的:编写库的良好实践的描述。非常感谢。有关此职位的一些支持,请参阅我的另一个项目(一个独立的应用程序)中。下的注释,我使用相同的函数来加速正确的日志配置(我想做的)。我正在考虑如何在这里使用相同的配置,但这个答案正是我想要的:描述编写库的良好实践。非常感谢。