Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于多模块的Python日志记录_Python_Logging_Config - Fatal编程技术网

用于多模块的Python日志记录

用于多模块的Python日志记录,python,logging,config,Python,Logging,Config,我正在从事一个包含多个模块的python项目。我尝试用log.conf实现日志记录,它已经按预期工作了。但是,我想知道,有没有其他方法可以在不向log.conf添加logger键的情况下将logger添加到模块中?因为为我需要添加logger的每个模块添加键非常麻烦 目前,我的log.conf如下所示 [loggers] keys=root,main,xx_utils,xx_config,xx_extraction, .... [handlers] keys=consoleHandler,ro

我正在从事一个包含多个模块的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键。

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

当前日志维护人员的回答解释了如何很好地实现多个模块:

我发现这个答案也很有帮助:

对于您的特定问题,基本上,如果您的所有记录器都具有相同的配置(看起来是这样),那么我认为最简单的方法是在您的配置中建立和配置根记录器,如下所示:

[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级别,因此发送给这些记录器的日志将传递给父记录器,最终到达根记录器


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

谢谢,我知道我错过了一些明显的东西。