Supervisord-Protokolle zeigen meine Ausgabe nicht an
Ich habe ein [Programm:x] ausführen, und es gibt /sys.stdout.schreibt eine Menge Dinge. Keiner von denen kommt, die entweder in der AUTO-childlogdir [supervisord] oder in stdout_logfile [Programm:x]
Bin ich etwas fehlt?
Wie kann ich capture alles, was gedruckt oder stdout-ed von [Programm:x] ?
In meinem Programm bin ich ausdrücklich beides zu machen,
print "something"
sys.stdout.write("something")
Relevanten supervisord.conf-Datei
[supervisord]
childlogdir = %(here)s/../logs/supervisord/
logfile = %(here)s/../logs/supervisord/supervisord.log
logfile_maxbytes = 100MB
logfile_backups = 10
loglevel = info
pidfile = %(here)s/../logs/supervisord/supervisord.pid
umask = 022
nodaemon = false
nocleanup = false
[program:x]
directory = %(here)s/../
command = python file.py
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile = /appropriate-path/to/access.log
InformationsquelleAutor der Frage zubinmehta | 2012-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python-Ausgang ist gepuffert, stellen Sie sicher, Spülen Sie das
sys.stdout
- handler, um zu sehen, log-Meldungen früher:Auf python 3.3 und höher, können Sie die
flush=True
parameter haben die Funktion, die dies für Sie tun:InformationsquelleAutor der Antwort Martijn Pieters
Können Sie das Programm wie diesem:
diese produzieren Ungepufferte Ausgabe
InformationsquelleAutor der Antwort dizpers
Wenn Sie python-basiertes Skript, die Sie nicht können oder nicht wollen, zu ändern, zu Spülen Ausgabe auf einer regelmäßigen Basis können Sie dann unbuffer aus dem Paket Erwarten.
Für eine Django-Anwendung in einen docker-container habe ich in letzter Zeit verwendet, wie es das (von einem shell-Skript ausgeführt von supervisord):
InformationsquelleAutor der Antwort Zbyszek