Gunicorn: Wie drucke ich das Zugriffsprotokoll auf STDOUT?

Erstellt am 19. Jan. 2016  ·  22Kommentare  ·  Quelle: benoitc/gunicorn

Hallo,

http://docs.gunicorn.org/en/stable/settings.html#accesslog sagt mir, dass '-' an stderr ausgegeben wird, aber wir bevorzugen STDOUT für Protokollierungszwecke. Gibt es eine Möglichkeit, das zu tun?

Danke!

Documentation FeaturLogging

Hilfreichster Kommentar

Mit der Anwendungsdatei myapp.py habe ich folgendes versucht.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Ich kann bestätigen, dass die Ausgabe des Zugriffsprotokolls an stdout geht.

Alle 22 Kommentare

Die relevante Zeile ist hier: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() ist standardmäßig sys.stderr . Vielleicht könnten wir accesslog so ändern, dass es "stdout" und "stderr" als gültige Werte akzeptiert und an logging.StreamHandler() übergibt.

Eine andere, aber weniger flexible Lösung:

Der Konsolen-Handler druckt bereits auf sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 Wir könnten den Handler für gunicorn.accesslog auf „console“ setzen gunicorn.error in https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55 getan haben

Ich bin verwirrt. Meldet sich der StreamHandler nicht bereits bei sys.stdout an?

Okay, ich verstehe jetzt. Ursprünglich haben wir Protokolle auf stdout gedruckt. IMO sollte das Zugriffsprotokoll standardmäßig STDOUT sein. Die Gedanken?

@benoitc :+1:

Zugriffsprotokoll auf stdout
Fehlerprotokoll auf stderr

Gibt es Neuigkeiten zu dieser Anfrage?

@benoitc Ich bin mir nicht sicher, ob dieser Commit dieses Problem anspricht. Nehmen wir an, ich führe gunicorn myapp:app ohne zusätzliche Argumente aus. Ist die Erwartung, dass Gunicorn Zugriffsdatensätze in der Standardausgabe protokollieren sollte? Wenn ja, tut Gunicorn das nicht.

In https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 ohne Befehlszeilenargumente ist self.cfg.accesslog None und die Funktion kehrt früh zurück. Soweit ich das beurteilen kann, scheint es keine Möglichkeit zu geben, sich bei stdout anzumelden, ohne --log-config oder --log-syslog anzugeben. Ist das richtig?

Standardmäßig ist das Zugriffsprotokoll deaktiviert, wenn Sie das meinen?

@benoitc Ja. Die obige Diskussion scheint darauf hinzudeuten, dass Zugriffsprotokolle nach stdout und Fehlerprotokolle nach stderr gehen. Es sieht jedoch so aus, als wäre die Zugriffsprotokollierung standardmäßig deaktiviert.

Übrigens, mit Python 2.7 konnte ich früher --access-log /dev/stdout --error-log /dev/stderr machen und das würde funktionieren. Bei Python 3 schlägt die Übergabe /dev/stdout als Argument in https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498 fehl

👍 @suriya Ich denke, ich suche nach dem gleichen Verhalten wie Sie - ich würde gerne --capture-log ausführen und $#$ --access-logfile=<something> $#$ aktivieren, aber ich würde es vorziehen, wenn meine Zugriffsprotokollzeilen auf stdout gehen nicht stderr.

BEARBEITEN: Zur Verdeutlichung scheint dies nur ein Problem mit Python3 zu sein. Bei Verwendung von python3.5.1 kann das Übergeben --access-logfile=/dev/stdout an gunicorn den Server nicht starten.

Ja, anscheinend ist die Zugriffsprotokollierung standardmäßig deaktiviert.

@huoxy Mehr als das, was der Standardwert ist, denke ich, dass das Problem eher darin besteht, dass es keine einfache Möglichkeit gibt, Zugriffsprotokolle in die Standardausgabe zu schreiben.

@huoxy ˋ--access-logfile=-` sollte funktionieren. Lassen Sie mich wissen, wenn nicht.

  • benoît
    Am Mittwoch, 27. Juli 2016 um 08:49, Suriya Subramanian [email protected]
    schrieb:

@huoxy https://github.com/huoxy Mehr als das, was der Standardwert ist, denke ich
Das Problem ist eher, dass es keine einfache Möglichkeit gibt, Zugriffsprotokolle zu schreiben
Standardausgabe.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

auch ist es wahrscheinlich ein Doc-Problem. aber das Zugriffsprotokoll muss auf stdout gedruckt werden
wenn - verwendet wird. ansonsten ist es ein bug. Gib mir Bescheid...
Am Mittwoch, den 27. Juli 2016 um 09:03 Uhr schrieb Benoit Chesneau [email protected] :

@huoxy ˋ--access-logfile=-` sollte funktionieren. Lassen Sie mich wissen, wenn nicht.

  • benoît
    Am Mittwoch, 27. Juli 2016 um 08:49, Suriya Subramanian [email protected]
    schrieb:

@huoxy https://github.com/huoxy Mehr als das, was der Standardwert ist, denke ich
Das Problem ist eher, dass es keine einfache Möglichkeit gibt, Zugriffsprotokolle zu schreiben
Standardausgabe.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc Wie in #1293 erwähnt, protokolliert gunicorn --access-log - Zugriffe auf Standardfehler. Ich habe es mit gunicorn --access-log=- versucht und das Protokoll geht immer noch zum Standardfehler.

demzufolge:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

Der Standard-Logger ist console , der auf stdout ausgegeben wird. Wenn Sie also alles wie ich auf stdout benötigen, können Sie diese Optionen einfach leer lassen, damit alles zum Gunicorn-Protokollierungstreiber gelangt.

Die Lösung, die ich vorschlagen würde, besteht außerdem darin, einen symbolischen Link für die Protokolldateien zu /dev/stdout oder /dev/stderror zu erstellen, wenn dies nicht direkt funktioniert:

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

Ich bin gerade zu Gunicorn 19.7.0 gewechselt, das letzte Woche veröffentlicht wurde. Leider kann ich das Zugriffsprotokoll immer noch nicht auf etwas anderes als stderr schreiben lassen.

Ich habe versucht, Gunicorn ohne Optionen auszuführen und auch mit allen Permutationen, "--access-logfile=- --error-logfile=- --log-level=DEBUG" einzuschließen/nicht einzuschließen.

Übersehe ich etwas Grundlegendes über Gunicorns Protokollierung? Blutet möglicherweise etwas aus meiner Umgebung oder von Django über und verursacht dieses Problem?

Mit der Anwendungsdatei myapp.py habe ich folgendes versucht.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Ich kann bestätigen, dass die Ausgabe des Zugriffsprotokolls an stdout geht.

Ich bin auf Python 2.7.14. (Irgendwie habe ich die schnelle Antwort vor Monaten verpasst.)

Sie können auch accesslog = "-" in Ihrer gunicorn.config.py verwenden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen