【问题标题】:Why are loggers not propogating when I run pytest为什么当我运行 pytest 时记录器没有传播
【发布时间】:2021-03-23 10:31:07
【问题描述】:

我无法从我的单元测试中获取日志记录输出,原因似乎是当我运行 pytest 时,除了根记录器之外的所有记录器都将传播设置为 false。我可以使用pytestpython test_file.py 运行以下文件。前者为logging.getLogger('one').propagate == True,后者为logging.getLogger('one').propagate == False。这是为什么呢?

test_file.py

import logging

def test_function():
  print()
  print('root', logging.getLogger().propagate)
  print('one', logging.getLogger('one').propagate)

if __name__ == '__main__':
  test_function()

如何让我的所有记录器传播?搜索互联网只会发现有关如何关闭传播的问题,好像大多数人的经历与我相反。

【问题讨论】:

    标签: python logging pytest


    【解决方案1】:

    这不是 pytest 的问题。我在 cpython 和 pytest 源代码中搜索了可以执行此操作的任何内容,但一无所获。然后我单步执行 getLogger 代码,发现调用 logging.setLoggerClass 函数并将记录器类替换为将传播设置为 false 的子类。我在 setLoggerClass 上设置了一个断点,发现 ROS2 提供的一个 pytest 插件正在这样做。我在 pytest.ini 中添加了以下内容,现在一切正常。

    [pytest]
    addopts = -p no:launch -p no:launch_ros
    

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2013-06-24
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多