我正在尝试logbook
在 PyTest 测试中设置以将所有内容输出到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