2
我试图在PyTest测试中设置logbook
以将所有内容输出到stderr
和一个文件。该文件应该获得每个日志级别,但stderr
应该有一个更高的阈值(PyTest将使用它的通常捕获设置进行管理)。我有插件。这将stderr
重定向到PyTest捕获,但我不知道如何添加文件输出。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