logbook
をPyTestテストでセットアップして、stderr
とファイルの両方にすべてを出力しようとしています。ファイルはすべてのログレベルを取得する必要がありますが、stderr
のしきい値は高くなります(通常のキャプチャ設定でPyTestが管理します)。pytest logbookがファイルと標準出力にログする
私はpytest-logbook
プラグインを持っています。それはstderr
をPyTestのキャプチャにリダイレクトしますが、ファイル出力を追加する方法がわかりません。
これは(うまくいけば)ログブックを知っている人には分かりやすいですが、それは私には新しかったです。
さらにもう1つ、ファイルのログ記録をリアルタイムにしたい。私のテストは一般的に長時間実行されており、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