Ich versuche logbook
in einem PyTest-Test einzurichten, um sowohl stderr
als auch eine Datei auszugeben. Die Datei sollte jede Protokollstufe erhalten, aber stderr
sollte einen höheren Schwellenwert haben (den PyTest mit seinen üblichen Aufnahmeeinstellungen verwalten wird).pytest logbook Logging in Datei und stdout
Ich habe das pytest-logbook
Plugin. Das leitet stderr
in PyTest-Capture um, aber ich bin nicht sicher, wie die Dateiausgabe hinzugefügt wird.
Dies ist (hoffentlich) offensichtlich für jemanden, der Logbuch kennt, aber es ist neu für mich.
Noch eine Sache, ich möchte die Dateiprotokollierung in Echtzeit sein. Meine Tests laufen in der Regel lange, und das normale Verhalten von PyTest, bei dem nur die Ausgabe nach einem Fehler angezeigt wird, hilft nicht, wenn ich sehen muss, ob die Dinge hängen bleiben.
Hier ist Code, der meiner Meinung nach funktionieren sollte, aber nicht. Ich erhalte die Protokolldatei, aber nichts zu stdout
/stderr
(auch auf fail):
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