Ich habe einen Flask-Server, der im Standalone-Modus (mit app.run()
) ausgeführt wird. Aber ich möchte keine Nachrichten in der Konsole, wie
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 -
...
Wie deaktiviere ich den ausführlichen Modus?
stderr
aber sie protokollieren nur jede HTTP-Transaktion, irgendwie irrelevant für mich ...Antworten:
Sie können die Ebene des Werkzeug-Loggers auf ERROR setzen. In diesem Fall werden nur Fehler protokolliert:
Hier ist ein voll funktionsfähiges Beispiel, das unter OSX, Python 2.7.5, Flask 0.10.0 getestet wurde:
quelle
click.secho
Diese Lösung bietet Ihnen eine Möglichkeit, Ihre eigenen Ausdrucke und Stapelspuren zu erhalten, jedoch ohne Protokolle auf Informationsebene aus dem Kolben saugen als
127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200
quelle
Die @ Drewes-Lösung funktioniert die meiste Zeit, aber in einigen Fällen bekomme ich immer noch Werkzeugprotokolle. Wenn Sie wirklich keine von ihnen sehen möchten, empfehle ich Ihnen, sie so zu deaktivieren.
Für mich ist es gescheitert, als
abort(500)
es angehoben wurde.quelle
Wenn Sie einen WSGI-Server verwenden, setzen Sie das Protokoll auf Keine
quelle
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 :
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: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:
quelle
Späte Antwort, aber ich habe einen Weg gefunden, JEDE UND JEDE KONSOLE-NACHRICHT zu unterdrücken (einschließlich derjenigen, die während eines
abort(...)
Fehlers angezeigt werden).Dies ist im Grunde eine Kombination der Antworten von Slava V und Tom Wojcik
quelle
Keine der anderen Antworten funktionierte richtig für mich, aber ich fand eine Lösung basierend auf Peters Kommentar . Flask wird anscheinend nicht mehr
logging
für die Protokollierung verwendet und hat auf das Click- Paket umgestellt . Durch Überschreibenclick.echo
undclick.secho
ich habe Flask's Startmeldung von entferntapp.run()
.Zwischen dem Festlegen der Protokollierungsstufe
ERROR
und dem Überschreiben der Klickmethoden mit leeren Funktionen sollten alle fehlerfreien Protokollausgaben verhindert werden.quelle
Um zu unterdrücken
Serving Flask app ...
:quelle
Eine Brute-Force- Methode, wenn Sie wirklich nicht möchten, dass sich neben print () -Anweisungen etwas in der Konsole anmeldet, ist to
logging.basicConfig(level=logging.FATAL)
. Dies würde alle Protokolle deaktivieren, die den Status "Schwerwiegend" haben. Es würde das Drucken nicht deaktivieren, aber ja, nur ein Gedanke: /EDIT: Mir wurde klar, dass es egoistisch von mir wäre, keinen Link zu der von mir verwendeten Dokumentation zu setzen :) https://docs.python.org/3/howto/logging.html#logging-basic-tutorial
quelle
Der erste Punkt: Gemäß der offiziellen Flask-Dokumentation sollten Sie die Flask-Anwendung nicht mit app.run () ausführen. Die beste Lösung ist die Verwendung von uwsgi, sodass Sie Standard-Kolbenprotokolle mit dem Befehl "--disable-logging" deaktivieren können.
Beispielsweise:
uwsgi --socket 0.0.0.0:8001 --disable-logging --protocol=http -w app:app
quelle