我无法从单元测试中获取日志输出,原因似乎是当我运行 pytest 时,除根记录器之外的所有记录器都将传播设置为 false。我可以使用 pytest 和 python test_file.py 运行以下文件。前者为 logging.getLogger('one').propagate == True
,后者为 logging.getLogger('one').propagate == False
。这是为什么?
测试文件.py
import logging
def test_function():
print()
print('root', logging.getLogger().propagate)
print('one', logging.getLogger('one').propagate)
if __name__ == '__main__':
test_function()
如何让我的所有记录器传播?在互联网上搜索只会出现有关如何关闭传播的问题,就好像大多数人都有与我相反的经历。
最佳答案
这不是 pytest 的问题。我在 cpython 和 pytest 源代码中搜索了任何可以执行此操作的内容,但什么也没找到。然后,我单步执行 getLogger 代码,发现有东西正在调用logging.setLoggerClass 函数,并将记录器类替换为将传播设置为 false 的子类。我在setLoggerClass上设置了断点,发现ROS2提供的一个pytest插件正在做这个。我将以下内容添加到 pytest.ini 中,现在一切正常。
[pytest]
addopts = -p no:launch -p no:launch_ros
关于python - 为什么当我运行 pytest 时记录器不传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65260992/