我正在从事一个包含多个模块的python项目。我尝试用log.conf实现日志记录,它已经按预期工作了。但是,我想知道,有没有其他方法可以在不向log.conf添加logger键的情况下将logger添加到模块中?因为为我需要添加logger的每个模块添加键非常麻烦
目前,我的log.conf如下所示
[loggers]
keys=root,main,xx_utils,xx_config,xx_extraction, ....
[handlers]
keys=consoleHandler,rotatingFileHandler
[formatters]
keys=defaultFormatters
[logger_root]
handlers=consoleHandler
[logger_main]
handlers=rotatingFileHandler
level=INFO
qualname=__main__
propagate=1
[xx_utils]
handlers=rotatingFileHandler
level=INFO
qualname=xx_utils
propagate=1
....
本质上,我想知道是否有可能创建一个loggerUtils类,该类可以由每个模块导入,这样我就不需要向log.conf添加loggers键
作为一个在过去几天里花了太多时间学习如何做到这一点的人,我想我终于做到了,我会尝试向你指出是什么帮助了我
当前日志维护人员的回答很好地解释了如何使用多个模块实现:https://stackoverflow.com/a/15735146/2574074
我发现这个答案也很有帮助: https://stackoverflow.com/a/4150322/2574074
对于您的特定问题,基本上,如果您的所有记录器都具有相同的配置(看起来是这样),那么我认为最简单的方法是在您的配置中建立和配置根记录器,如下所示:
但是,您实际上不会直接登录到根日志记录器
相反,在每个模块的顶部添加以下内容:
或者您可以使用任何您想要的名称:
这将为每个模块建立一个新的记录器(即,无需创建单独的loggerUtils类),并且由于您没有设置级别,因此默认情况下,这些记录器中的每一个都将具有NOTSET级别,因此发送给这些记录器的日志将传递给父记录器,最终到达根记录器
给我带来麻烦的重要提示是,确保以与其他子模块相同的方式为主模块建立记录器,但确保在读取配置文件并建立/配置根记录器后执行此操作。否则,如果以脚本形式运行main.py,您将通过调用
logger = logging.getLogger(main)
或logger = logging.getLogger(__name__)
自动建立根记录器,但它不会具有您想要的配置相关问题 更多 >
编程相关推荐