python testfixtures.LogCapture未捕获日志

3 投票
1 回答
1051 浏览
提问于 2025-04-29 07:02

我有一个多模块的Python包。其中一个模块基本上是一个命令行应用,我们可以称它为“顶层”模块。另一个模块里面有三个类,实际上是这个应用的后台部分。

顶层模块在它的类的初始化方法里,使用了logging.basicConfig来设置日志记录,把调试信息记录到文件中,然后还添加了一个控制台日志记录器,用于记录信息级别及以上的日志。后台的类只需要用getLogger(类名)来获取日志记录器,因为当应用完整运行时,后台会被顶层的命令行前端调用,所以日志记录的设置已经完成了。

在测试类中(这个类是从unittest.TestCase继承来的,通过nose运行),我在setup方法里简单地运行了testfixtures.LogCapture(),在tearDown方法里运行testfixtures.LogCapture.uninstall_all(),这样所有的日志都能被很好地捕获,毫不费力。

在后台的测试文件中,我尝试做同样的事情。在setup里运行testfixtures.LogCapture,在teardown里运行uninstall_all。然而,当我为后台运行单元测试时,所有的“INFO”级别的日志信息仍然会打印出来。

如果能帮我解决以下问题,那就太好了:

1) 为什么日志捕获在前端有效,但在后台却不行?

2) 有没有一种优雅的方法,可以在我的后台类中记录和捕获日志,而不需要在这些文件里显式地设置日志记录?

这将非常棒。

暂无标签

1 个回答

0

我通过把 'disable_existing_loggers' 设置为 False 来解决了同样的问题。当我重新配置日志记录器时,之前的日志记录器被禁用了,这导致它无法把日志信息传递给根日志记录器。

撰写回答