Ein weiterer Grund, warum Sie möglicherweise die Protokollausgabe ändern möchten, sind Tests und die Umleitung der Serverprotokolle in eine Protokolldatei.
Ich konnte den obigen Vorschlag auch nicht zum Laufen bringen. Es sieht so aus, als würden Logger als Teil des App-Starts eingerichtet. Ich konnte es zum Laufen bringen, indem ich die Protokollebenen nach dem Start der App änderte :
... (in setUpClass)
server = Thread(target=lambda: app.run(host=hostname, port=port, threaded=True))
server.daemon = True
server.start()
wait_for_boot(hostname, port) # curls a health check endpoint
log_names = ['werkzeug']
app_logs = map(lambda logname: logging.getLogger(logname), log_names)
file_handler = logging.FileHandler('log/app.test.log', 'w')
for app_log in app_logs:
for hdlr in app_log.handlers[:]: # remove all old handlers
app_log.removeHandler(hdlr)
app_log.addHandler(file_handler)
Leider wird der * Running on localhost:9151
und der erste Gesundheitscheck immer noch standardmäßig gedruckt, aber wenn viele Tests ausgeführt werden, wird die Ausgabe eine Tonne bereinigt.
"Also warum log_names
?", Fragst du. In meinem Fall gab es einige zusätzliche Protokolle, die ich entfernen musste. Ich konnte herausfinden, welche Logger zu log_names hinzugefügt werden sollen über:
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
Randnotiz: Es wäre schön, wenn es eine flaskapp.getLogger () oder etwas anderes gäbe, so dass dies über Versionen hinweg robuster wäre. Irgendwelche Ideen?
Einige weitere Schlüsselwörter: Kolbentestprotokoll stdout-Ausgabe entfernen
Dank an: