2013-02-15 20 views
45

Ich habe einen Flask-Server im Standalone-Modus (unter Verwendung von app.run()). Aber ich möchte keine Nachrichten in der Konsole, wieKonsolenmeldungen im Flask-Server deaktivieren

127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 - 
... 

Wie deaktiviere ich den ausführlichen Modus?

+0

Darf ich fragen, warum * * Sie nicht wollen, Die HTTP-Anfrage protokolliert?! .. –

+0

@DemianBrecht Ich werde das als Thread in meiner Hauptanwendung starten und möchte nicht, dass diese meine anderen Nachrichten durcheinander bringen . – ATOzTOA

+0

Also haben Sie jetzt eine App, die Threads startet (die schwer genug sind, um sich selbst zu debuggen) und jetzt werden Sie die Anmeldung bei * top * davon unterdrücken? Eesh, klingt wie das Gegenteil von dem, was ich tun würde. Je ausführlicher dein Logging ist, desto besser (natürlich solange es relevant ist;)). –

Antwort

67

Sie eingestellten Pegel des Werkzeug-Logger einstellen auf ERROR, in diesem Fall nur Fehler protokolliert werden:

import logging 
log = logging.getLogger('werkzeug') 
log.setLevel(logging.ERROR) 

hier ein voll funktionierendes Beispiel testet auf OSX sind, Python 2.7.5, Flask 0.10.0 :

from flask import Flask 
app = Flask(__name__) 

import logging 
log = logging.getLogger('werkzeug') 
log.setLevel(logging.ERROR) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run() 
+10

Funktioniert nicht für mich. –

+6

Dies scheint nicht zu stoppen HTTP-Protokolle zu stderr gehen; Es stoppt die "startende" Nachricht (die eindeutig den Modulnamen "werkzeug" im Log-Format hat.) – rsb

+1

Funktioniert für mich. Die Anfrage Debug-Meldungen sind unterdrückt. Mit Python 3.5.2, Flask 0.12 und Werkzeug 0.11.11 – user3469861

5

ein weiterer Grund, Sie können die Log-Ausgabe für Tests zu ändern ist, und die Server-Logs in eine Protokolldatei umleiten.

Ich konnte den obigen Vorschlag auch nicht funktionieren, es sieht so aus, als ob Logger als Teil der App gestartet werden. Ich konnte es zum Laufen zu bringen, indem sie den Log-Level nach Änderung der App starten:

... (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 ist die * Running on localhost:9151 und die erste Gesundheits-Check gedruckt wird noch Standard, aber wenn viele Tests läuft es aufräumt die Ausgabe eine Tonne.

"Warum also log_names?", Fragen Sie. In meinem Fall gab es einige zusätzliche Protokolle, die ich loswerden musste. Ich war in der Lage zu finden, die zu log_names hinzufügen Logger über:

from flask import Flask 
app = Flask(__name__) 

import logging 
print(logging.Logger.manager.loggerDict) 

Randbemerkung: Es wäre schön, wenn es ein flaskapp.getLogger ist() oder etwas so war dies robuster gegenüber Versionen. Irgendwelche Ideen?

Einige mehrere Schlüsselwörter: Kolben Testprotokoll entfernen stdout Ausgabe

dank:

Verwandte Themen