Python:从不同模块登录到同一文件的正确方法

Hom*_*lli 10 python logging

我随着时间的推移编写了一堆脚本,我正在重新编写脚本以保持代码DRY.我目前在各种脚本中使用这些内容:

if __name__ == '__main__':
    logger = logging.getLogger('dbinit')
    hdlr = logging.FileHandler('/var/logs/tmp/foo.log')
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    hdlr.setFormatter(formatter)
    logger.addHandler(hdlr) 
    logger.setLevel(logging.WARNING)
Run Code Online (Sandbox Code Playgroud)

我想在每个脚本(即"模块")中重复这个,而不是在某个地方完成这个记录器初始化,并通过各种脚本访问(嗯,可能包装在单个类中?).

如果我不能这样做(即将记录器初始化代码放在一个核心模块中),我假设通过在logging.FileHandler()调用中使用相同的日志文件名,各种脚本将写入同一文件.

这个假设是否正确?

最后但并非最不重要的是,解决这个问题的最佳实践(即Pythonic)方法是什么?

Pio*_*ost -1

(...) 如果处理程序已经存在,addHandler() 将不会添加处理程序,因此在许多地方拥有这样的初始化代码不会有什么坏处。

如果我不能这样做(即将记录器初始化代码放在一个核心模块中)

您可以执行此操作,并且如果您想确保初始化代码运行一次,则应该执行此操作。