python - 为什么当我运行 pytest 时记录器不传播

标签 python logging pytest

我无法从单元测试中获取日志输出,原因似乎是当我运行 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/

相关文章:

python-3.x - 在 py.test 测试中重新启动 python (或重新加载模块)

python - 使 py.test、coverage 和 tox 一起工作 : __init__. py 在测试文件夹中?

python - Continue if else in inline for Python

python - DNA 字符串中随机基序搜索的意外输出

java - 如何每 2 分钟调用一次 Web 服务

amazon-web-services - Cloudwatch 中 LogGroup 的默认保留期是多长?

python - Python 中的 unicode 类

python - for 语句中的动态数组

java - 使用同一对象将不同级别记录到不同文件

python - Tavern(pytest),禁用 SSL 证书验证