gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:28:45 27 4
gpt4 key购买 nike

随着时间的推移,我写了一堆脚本,我正在重构脚本以保留代码 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)

我不想在每个脚本(即“模块”)中重复此操作,而是希望在某处完成此记录器初始化并由各种脚本访问(嗯,也许包装在一个单例类中?)。

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

这个假设是否正确?

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

最佳答案

鉴于您正在使用 if __name__ == __main__,我假设这些脚本将作为不同的进程运行。如果是这种情况,那么您应该使用单独的配置文件。

此配置可以按照文档中指定的格式存储在文件中。然后,您可以使用 logging.config.fileConfig 加载文件。您还可以将配置存储为 JSON/YAML 格式,将其转换为字典并使用 logging.config.dictConfig 加载它。后者是当前推荐的方法,尽管我发现前者更直接。阅读this了解更多信息。

使用配置文件方法的优点有很多:

  1. 它将配置设置与您的代码分开
  2. 它允许非程序员更改配置,因为它们以易于阅读的格式存储
  3. 它还可以防止您重复您已经提到的内容。

关于Python:从不同模块登录到同一文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com