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