我在python中有一个多模块包。其中一个模块本质上是一个命令行应用程序。我们称之为“顶级”"模块。另一个模块中有三个类,它们实际上是应用程序的后端。
toplevel模块,在它的类的init中,执行logging.basicConfig以将调试记录到文件,然后为info及更高版本添加控制台记录器。后端类只使用getLogger(classname),因为当应用程序完全运行时,后端将由顶级命令行前端调用,因此已经配置了日志记录。
在Test类中(从unittest.TestCase继承并通过nose运行),我只需在setup中运行testfixtures.LogCapture(),在tearDown中运行testfixtures.LogCapture.uninstall_all(),并且所有日志记录都被捕获得很好,没有努力。
在后端测试文件中,我尝试做同样的事情。我在设置中运行testfixtures.LogCapture,在拆解中运行uninstall_all。然而,所有的" INFO"当我为后端运行单元测试时,仍会打印级别logmessages。
的任何帮助
1)为什么日志捕获适用于前端但不适用于后端
2)能够在我的后端类中记录和捕获日志的优雅方式,而无需明确设置这些文件中的日志记录。
会很棒。
答案 0 :(得分:0)
我通过在重新配置Logger时将'disable_existing_loggers'设置为False来解决同样的问题:前一个记录器已被禁用,并阻止它将日志传播到RootLogger。