【问题标题】:python testfixtures.LogCapture not capturing logspython testfixtures.LogCapture 不捕获日志
【发布时间】:2014-10-23 16:28:38
【问题描述】:

我在 python 中有一个多模块包。其中一个模块本质上是一个命令行应用程序。我们将其称为“顶级”模块。另一个模块中包含三个类,它们本质上是应用程序的后端。

顶级模块,在它的类的 init 中,执行 logging.basicConfig 以将调试记录到文件中,然后为 info 及以上添加一个控制台记录器。后端类只使用getLogger(classname),因为当应用程序完全运行时,后端会被顶层命令行前端调用,所以日志已经配置好了。

在 Test 类(从 unittest.TestCase 子类化并通过鼻子运行)中,我只需在 setup 中运行 testfixtures.LogCapture(),在 tearDown 中运行 testfixtures.LogCapture.uninstall_all(),所有的日志记录都被很好地捕获,不费吹灰之力。

在后端测试文件中,我尝试做同样的事情。我在设置中运行 testfixtures.LogCapture,在拆卸中运行uninstall_all。但是,当我为后端运行单元测试时,仍然会打印所有“INFO”级别的日志消息。

任何帮助

1) 为什么日志捕获适用于前端而不适用于后端

2) 一种优雅的方式,能够在我的后端类中记录和捕获日志,而无需在这些文件中明确设置日志记录。

会很棒。

【问题讨论】:

  • 结果是,如果我同时运行任一测试文件(每个模块一个文件),那么我就没有日志记录问题。只有当我一起运行它们时,我才会将日志行打印到控制台。
  • 我还发现,如果我将后端测试文件重命名为在前端之前运行的文件,它就可以工作。我目前的猜测是,由于 basicConfig 不可覆盖,因此执行 basicConfig 会以某种方式继承第二个测试文件未使用的流,因此不起作用。我将尝试以不同的方式配置我的记录器。

标签: python logging unit-testing


【解决方案1】:

我通过在重新配置 Logger 时将“disable_existing_loggers”设置为 False 解决了同样的问题:之前的记录器已被禁用,并且阻止它将日志传播到 RootLogger。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2013-12-29
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多