Gunicorn: Protokollieren Sie Nachrichten von Flasks app.logger

Erstellt am 19. Juli 2012  ·  11Kommentare  ·  Quelle: benoitc/gunicorn

Nachrichten vom Logger von Flask wie app.logger.info(„Dies ist eine Nachricht“) werden nicht in den Gunicorn-Protokolldateien gespeichert.

Hilfreichster Kommentar

Flask protokolliert standardmäßig keine Nachrichten im Produktionsmodus, da keine Annahmen über Ihre Umgebung getroffen werden (http://flask.pocoo.org/docs/errorhandling/). Damit app.logger von Flask Nachrichten über gunicorn protokolliert, müssen Sie einen Protokollierungs-Handler hinzufügen. Hier ist zum Beispiel ein Logger für gunicorns stderr:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Dies ist kein Problem mit Gunicorn und kann geschlossen werden.

Alle 11 Kommentare

Flask protokolliert standardmäßig keine Nachrichten im Produktionsmodus, da keine Annahmen über Ihre Umgebung getroffen werden (http://flask.pocoo.org/docs/errorhandling/). Damit app.logger von Flask Nachrichten über gunicorn protokolliert, müssen Sie einen Protokollierungs-Handler hinzufügen. Hier ist zum Beispiel ein Logger für gunicorns stderr:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Dies ist kein Problem mit Gunicorn und kann geschlossen werden.

auf Anfrage geschlossen. Danke!

Holt Gunicorn automatisch das Protokoll von STDERR ab?

@benoitc
Wie zwinge ich Gunicorn, Protokoll von STDERR auszuwählen?

Das Flag -R könnte das sein, wonach Sie suchen.

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance

-R hat es nicht für mich getan.

Unten ist mein Setup

@app.route('/')
def index():
    console = logging.StreamHandler()
    log = logging.getLogger("asdasd")
    log.addHandler(console)
    log.setLevel(logging.DEBUG)
    log.error("Something")
    print >> sys.stderr, "Another thing"
    return 'ok'

So führe ich es aus

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app

Ich erhalte die Gunicorn-Protokolle in /mnt/log/test.log, aber keines meiner Anwendungsprotokolle.

Okay. Ich kann missverstehen, wie das funktioniert, es sei denn, es ist eine einfache Sache
stderr manuell leeren müssen (IIRC, das liegt daran, dass es gepuffert wird
wenn Gunicorn sich gabelt, vielleicht?)

Aber es ist definitiv viel einfacher zu kontrollieren, wohin Ihre Protokollnachrichten gehen, wenn
Sie verwenden die Python-Logger anstelle von stdio.
Am 26. Juni 2014 um 13:39 Uhr schrieb „Yousuf Fauzan“ [email protected] :

-R hat es nicht für mich getan.

Unten ist mein Setup

@app.route('/')
def-Index():
Konsole = Protokollierung.StreamHandler()
log = Protokollierung.getLogger("asdasd")
log.addHandler (Konsole)
log.setLevel(Protokollierung.DEBUG)
log.error("Etwas")
print >> sys.stderr, "Eine andere Sache"
gib 'ok' zurück

So führe ich es aus

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level debug server:app

Ich bekomme die Gunicorn-Protokolle in /mnt/log/test.log, aber keine meiner Anwendungen
Protokolle.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/benoitc/gunicorn/issues/379#issuecomment -47276949.

Ich glaube, ich habe das Problem gefunden. Hier ein Eintrag im Changelog für 19.00

fix logging: don’t try to redirect stdout/stderr to the logfile.

Ich habe es gerade mit v18 versucht und die Protokolle von StreamHandler werden an Gunicorn-Protokolle weitergeleitet. Irgendeine Idee, wie man das beheben kann?
@benoitc @tilgovi

@spicavigo gunicorn leitet stderr nicht automatisch in die Protokolldatei um. Die Lösung bestand darin, den Hack zu entfernen, wie es in #591 besprochen wurde. Haben Sie --error-logfile=- ausprobiert, wodurch die Protokolle auf der Konsole angezeigt werden?

Wenn Sie den Fehler direkt in die Fehlerdatei zurückgeben möchten, können Sie eventuell in environ['wsgi.errors'] drucken oder ihn protokollieren: ee08ac86441e36c3433849b79b3839d1425647fd .

Danke @benoitc

Ich logge mich jetzt in eine Datei anstelle von stderr ein. Es ist nur so, dass die Änderung zwischen meinen Entwicklern passiert ist und mich total gestolpert hat. Ich war pip install gunicorn und plötzlich funktionierte die stderr-Umleitung nicht mehr und ich wusste nicht, dass es an einer Versionsänderung und nicht an Fehlern in meinem Code lag :)

@benoitc Ist es immer noch möglich, stderr irgendwie in die Protokolldatei einzuloggen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen