Wie kann ich Trace-Nachrichten an die Konsole senden (wie print
), wenn ich meine Django-App unter ausführe manage.py runserver
, aber diese Nachrichten an eine Protokolldatei senden lassen, wenn ich die App unter Apache ausführe?
Ich habe die Django-Protokollierung überprüft und obwohl ich von der Flexibilität und Konfigurierbarkeit für fortgeschrittene Anwendungen beeindruckt war, bin ich immer noch ratlos, wie ich mit meinem einfachen Anwendungsfall umgehen soll.
Antworten:
Auf stderr gedruckter Text wird im Fehlerprotokoll von httpd angezeigt, wenn er unter mod_wsgi ausgeführt wird. Sie können entweder
print
direkt oderlogging
stattdessen verwenden.quelle
print("Goodbye cruel world!", file=sys.stderr)
Hier ist eine auf Django-Protokollierung basierende Lösung. Es verwendet die DEBUG-Einstellung, anstatt tatsächlich zu überprüfen, ob Sie den Entwicklungsserver ausführen oder nicht. Wenn Sie jedoch einen besseren Weg finden, dies zu überprüfen, sollte die Anpassung einfach sein.
Weitere Informationen finden Sie unter https://docs.djangoproject.com/de/dev/topics/logging/ .
quelle
LOGGING['loggers'][logger]['handlers'] += ['console']
settings.py
unten in meine ein und setze ihnDEBUG = True
(suche diese Einstellung oben in derselben Datei). Dannpython manage.py runserver
starte ich von einem Terminal aus (Einzelheiten finden Sie in den Django-Dokumenten), und die Protokollmeldungen werden im Terminalfenster angezeigt. In der Produktion würde ich eine andere settings.py verwenden, wobeiDEBUG = False
- die Protokollnachrichten an gehen/path/to/your/file.log
.Sie können die Protokollierung in Ihrer
settings.py
Datei konfigurieren .Ein Beispiel:
Dies hängt jedoch von der Einstellung von DEBUG ab, und vielleicht möchten Sie sich keine Gedanken darüber machen müssen, wie es eingerichtet ist. Siehe diese Antwort unter Wie kann ich feststellen, ob meine Django-Anwendung auf einem Entwicklungsserver ausgeführt wird oder nicht? für eine bessere Art, diese Bedingung zu schreiben. Bearbeiten: Das obige Beispiel stammt aus einem Django 1.1-Projekt. Die Protokollierungskonfiguration in Django hat sich seit dieser Version etwas geändert.
quelle
Ich benutze das:
logging.conf:
testapp.py:
quelle
Sie können dies ziemlich einfach mit
tagalog
(https://github.com/dorkitude/tagalog) tun.Während das Standard-Python-Modul beispielsweise in ein im Append-Modus geöffnetes Dateiobjekt schreibt, überschreibt das App Engine-Modul (https://github.com/dorkitude/tagalog/blob/master/tagalog_appengine.py) dieses Verhalten und verwendet es stattdessen
logging.INFO
.Um dieses Verhalten in einem App Engine-Projekt zu erhalten, kann man einfach Folgendes tun:
Sie können das Modul selbst erweitern und die Protokollfunktion ohne große Schwierigkeiten überschreiben.
quelle
Dies funktioniert in meiner local.py recht gut und erspart mir das Durcheinander bei der regulären Protokollierung:
quelle