我正在通过读取文件并使用来在 main.py 中设置 Python 日志记录文件配置 http://docs.python.org/library/logging.config.html选项。我希望能够在测试和实时日志记录配置之间切换,因此我想首先读取单独的配置文件并从那里提取日志记录配置文件路径。
这里的问题是我从 main.py 导入的其他文件通过获取它们自己的记录器log = getLogger(__name__)
,这发生在导入时。当加载新配置时,这些链接就会被破坏,并且这些模块最终不会按照我期望的方式进行日志记录。
如果不进行大量重构,我就无法轻易延迟这些模块的导入,那么有没有其他方法可以保留这种按模块名称设置记录器的方法,同时稍后仍加载到日志配置中?
从你的问题中我不确定事情到底是如何发生的,但这就是我的看法。各个模块的作用log = logging.getLogger(__name__)
将具有其记录器的有效名称(记录器名称 = 包名称),除非您以某种方式实际将模块移动到其他包位置。
在导入时,日志记录配置可能已设置,也可能未设置,并且不应作为导入的副作用而进行任何实际的日志记录调用(如果有,消息可能无处可去)。
使用加载新配置fileConfig
通常只是在记录器上设置处理程序、格式化程序和级别。
当您随后调用导入模块中的代码时,它们会通过记录器进行记录,这些记录器具有由您之前的配置调用附加的处理程序 - 因此它们将根据配置进行输出。
您应该知道,在旧版本的 Python (fileConfig将不可避免地禁用配置中未命名的现有记录器 - 在较新版本的 Python (>= 2.6) 中,可以使用disable_existing_loggers=False
关键字参数传递给fileConfig
。您可能需要检查这一点,因为它有时会导致意外行为(该参数的默认值是True
,以与旧版 Python 版本下的行为兼容)。
如果您发布有关似乎损坏的更多详细信息,我也许能够对正在发生的事情提供更好的诊断。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)