Un altro motivo per cui potresti voler modificare l'output di registrazione è per i test e reindirizzare i registri del server in un file di registro.
Non sono riuscito a far funzionare nemmeno il suggerimento sopra, sembra che i logger siano stati configurati come parte dell'avvio dell'app. Sono stato in grado di farlo funzionare modificando i livelli di registro dopo aver avviato l'app:
... (in setUpClass)
server = Thread(target=lambda: app.run(host=hostname, port=port, threaded=True))
server.daemon = True
server.start()
wait_for_boot(hostname, port)
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[:]:
app_log.removeHandler(hdlr)
app_log.addHandler(file_handler)
Purtroppo il * Running on localhost:9151 e il primo controllo di integrità sono ancora stampati come standard, ma quando si eseguono molti test pulisce l'output di un sacco.
"Allora perché log_names?", Chiedi. Nel mio caso c'erano alcuni registri extra di cui dovevo sbarazzarmi. Sono stato in grado di trovare quali logger aggiungere a log_names tramite:
from flask import Flask
app = Flask(__name__)
import logging
print(logging.Logger.manager.loggerDict)
Nota a margine: sarebbe bello se ci fosse un flaskapp.getLogger () o qualcosa del genere in modo che fosse più robusto tra le versioni. Qualche idea?
Ancora qualche parola chiave: il log di test del flask rimuove l'output di stdout
grazie a: