[英]pytest logbook logging to file and stdout
我正在尝试在PyTest测试中设置logbook
,将所有内容输出到stderr
和文件。 该文件应该获得每个日志级别,但是stderr
应该具有更高的阈值(PyTest将使用它通常的捕获设置来管理)。
我有pytest-logbook
插件。 这会将stderr
重定向到PyTest捕获,但我不确定如何添加文件输出。
这对于知道日志的人来说(希望)是显而易见的,但这对我来说是新的。
还有一件事,我希望文件记录是实时的。 我的测试通常是长时间运行的,PyTest只在失败时显示输出的正常行为在我需要查看是否挂起时没有帮助。
这是我认为应该工作的代码,但不是。 我得到了日志文件,但是什么都没有stdout
/ stderr
(即使失败):
conftest.py
:
import os
import pytest
import logbook
import sys
@pytest.fixture(scope='module')
def modlog(request):
"""Logger that also writes to a file."""
name = request.module.__name__
if name.startswith('test_'):
name = name[5:]
logname = 'TEST-'+name+'.log'
if os.path.exists(logname):
os.rename(logname, logname+"~")
logger = logbook.Logger(name)
logger.handlers.append(logbook.FileHandler(logname, level='DEBUG'))
logger.handlers.append(logbook.StreamHandler(sys.stdout, level='INFO'))
logger.warn("Start of logging")
return logger
test_loggy.py
:
import pytest
def test_foo(modlog):
modlog.info('hello')
modlog.info('world')
assert 0 # logs will only print on test fail
回答我自己的问题(如果其他人遇到同样的事情)。
日志处理程序形成一个堆栈,您必须允许消息“冒泡”。 这是在创建处理程序时作为选项完成的。
所以处理程序的创建应该是:
logger.handlers.append(logbook.FileHandler(logname, level='DEBUG', bubble=True))
logger.handlers.append(logbook.StreamHandler(sys.stderr, level='INFO', bubble=True))
如果你运行py.test -s
,那么你将实时看到信息级别的消息。 如果测试失败,日志插件将显示失败测试(包括调试)的所有日志消息。 您还将在文件中(实时)获得一份副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.