Python - Wie flush log? (django)
Arbeite ich mit Django-nonrel auf Google App Engine, die mich zwingt, logging zu verwenden.debug() anstelle von print().
Den "anmelden" - Modul wird zur Verfügung gestellt von Django, aber ich habe eine harte Zeit es zu benutzen anstelle von print().
Zum Beispiel, wenn ich brauche, um zu überprüfen, die Inhalte statt in die variable x, ich lege
logging.debug('x is: %s' % x)
. Aber wenn das Programm abstürzt bald (ohne Spülung der stream), dann, es wird nie gedruckt.
So für das Debuggen, ich brauche debug() geleert werden, bevor das Programm beendet auf Fehler, und das ist nicht passiert.
InformationsquelleAutor der Frage Rucent88 | 2012-11-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das kann für Sie arbeiten, wenn Sie nur mit einem(oder Standard -) handler:
Es ist irgendwie verpönt, in der Dokumentation, obwohl.
Und es könnte sein, eine Leistung in Anspruch, aber wenn Sie wirklich stecken, das kann helfen, mit der debugging.
InformationsquelleAutor der Antwort Mike Shultz
Kämpfte ich mit einem ähnlichen problem und hier ist, wie ich es gelöst. Anstelle der Verwendung von
logging
Modul direkt zur Ausgabe der Protokolle, initialisieren Sie Ihren eigenen logger wie folgt:Dann verwenden Sie es anstelle von
logging
im code:Als Ergebnis, werden Sie keine Probleme haben, mit Spül-logs mehr.
InformationsquelleAutor der Antwort constt
Django Protokollierung stützt sich auf das standard python logging Modul.
Diesem Modul eine Modul-level-Methode:
logging.shutdown()
die Leerungen alle Handler und schließt das logging-system (D. H. Protokollierung kann nicht mehr verwendet werden, nachdem es genannt wird)Inspektion der code dieser Funktion zeigt, dass derzeit (python 2.7) die logging-Modul enthält eine Liste der schwache Referenzen zu allen Prozeduren in einem Modul-level-variable namens _handlerList so alle Handler können gespült werden, etwas zu tun, wie
weil diese Lösung nutzt die Interna des Moduls @Mikes Lösung oben ist besser, aber es stützt sich auf Zugang zu einem logger, es kann verallgemeinert werden, wie folgt:
InformationsquelleAutor der Antwort tjb
Wenn der Anwendungsfall ist, dass Sie ein python-Programm, das sollte bündig seine Protokolle beim beenden, verwenden Sie
logging.shutdown()
.Aus der python-Dokumentation:
InformationsquelleAutor der Antwort Risadinha