【问题标题】:Python logging for multiple modules多个模块的 Python 日志记录
【发布时间】:2020-11-03 18:23:47
【问题描述】:

我正在开发一个包含多个模块的 python 项目。我尝试使用 log.conf 实现日志记录,它已经按预期工作。但是,我想知道,有没有其他方法可以在不向 log.conf 添加记录器键的情况下将记录器添加到模块中?因为为我需要添加记录器的每个模块添加键非常麻烦。

目前,我的 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 类,这样我就不需要将 loggers 键添加到 log.conf。

【问题讨论】:

    标签: python logging config


    【解决方案1】:

    作为一个过去几天花了太多时间学习如何做到这一点的人,我想我终于到了那里,并会尝试向您指出对我有帮助的地方。

    来自当前日志维护者的这个回答解释了如何很好地使用多个模块实现:https://stackoverflow.com/a/15735146/2574074

    我发现这个答案也很有帮助: https://stackoverflow.com/a/4150322/2574074

    对于您的具体问题,本质上,如果您的所有记录器都具有相同的配置(看起来它们确实如此),那么我认为最简单的方法是在您的配置中建立和配置您的根记录器,如下所示:

    [loggers]
    keys=root
    
    [handlers]
    keys=consoleHandler,rotatingFileHandler
    
    [formatters]
    keys=defaultFormatters
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler,rotatingFileHandler
    
    [handler_consoleHandler]
    ... your consoleHandler configuration ...
    
    [handler_rotatingFileHandler]
    ... your rotatingFileHandler configuration ...
    
    ... 
    
    

    但是,您实际上不会直接登录到根记录器。

    相反,在每个模块的顶部添加以下内容:

    import logging
    logger = logging.getLogger(__name__)
    

    或者你可以使用任何你想要的名字:

    import logging
    logger = logging.getLogger(xx_utils)
    

    这将为每个模块建立一个新的记录器(即,无需创建单独的 loggerUtils 类),并且由于您没有设置级别,因此这些记录器中的每一个默认情况下都具有 NOTSET 级别,因此这些记录器的日志将是传递给父记录器,最终到达根记录器。

    给我带来麻烦的重要提示是,确保以与其他子模块相同的方式为主模块建立记录器,但请务必在阅读配置文件并建立后执行此操作/配置根记录器。否则,如果将 main.py 作为脚本运行,您将通过调用 logger = logging.getLogger(main)logger = logging.getLogger(__name__) 自动建立根记录器,但它不会具有您想要的配置。

    【讨论】:

    • 谢谢,我知道我错过了一些明显的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2011-11-29
    • 2021-11-23
    • 1970-01-01
    • 2020-08-11
    • 2013-03-24
    相关资源
    最近更新 更多