Django-Protokollierung auf Heroku
Ich weiß, diese Frage wurde schon mehrmals gefragt, aber ich kann einfach nicht damit es funktioniert. Ich habe bereits den halben Tag damit verbracht zu versuchen Dutzende von Kombinationen, und jetzt wieder und es ist immer noch nicht funktioniert.
In meinem code, ich bin die Protokollierung in mehrere Teile, wie innerhalb eines try-except-oder zu Protokoll einige infos von management-Befehlen. Ich mache nur ganz normales Zeug, dass funktioniert auf mehreren lokalen installiert und auf einigen Nginx-Server.
Einer python-Datei wie diese :
import logging
logger = logging.getLogger(__name__)
logger.info('some important infos')
Mit folgenden minimal settings.py (ich habe versucht, ohne Strom Anzeige, ohne die Holzfäller angegeben, mit dem Namen Logger, der fast alle möglichen Kombinationen und ich habe auch versucht viel mehr komplexe)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'stream': sys.stdout
}
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'INFO',
},
'': {
'handlers': ['console'],
'level': 'INFO',
}
}
}
Dann auch einfach getestet von der shell aus heroku run python
import logging
level = logging.INFO
handler = logging.StreamHandler()
handler.setLevel(level)
handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
logger = logging.getLogger('info')
logger.addHandler(handler)
logger.setLevel(level) #even if not required...
logger.info('logging test')
Den letzten kann man zeigen, wie "print" - Anweisung in der Konsole, aber weder hier, noch von dem Befehl oder der server, nichts, nie, zeigt sich in heroku logs
....
EDIT: eigentlich habe ich einige Einträge angezeigt, Anwendungs-logs wie folgt, nur nicht von mir:
2013-09-20T15:00:16.405492+00:00 heroku[run.2036]: Process exited with status 0
2013-09-20T15:00:17+00:00 app[heroku-postgres]: source=HEROKU_POSTGRESQL_OLIVE sample[...]
2013-09-20T14:59:47.403049+00:00 heroku[router]: at=info method=GET path=/
2013-09-20T14:59:16.304397+00:00 heroku[web.1]: source=web.1 dyno=heroku [...]
Ich habe auch versucht, suchen Sie nach Einträgen mit mehreren addons. Ich hatte für einen moment am Anfang newrelic, die ich dann auch deaktiviert das WSGI-start-up. Ich kann mich nicht erinnern, ob es damals gut geklappt, die kostenlosen test-Zeitraum von newrelic ist eher kurz.
Gut, ich weiß nicht, was ich versuchen könnte, sonst... vielen Dank für jeden Hinweis
- wenn ich das log in eine Datei, wie kann ich mir die logs aus der Datei?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Protokollierung auf Heroku von Django, kann schwierig sein auf den ersten, aber es ist eigentlich gar nicht so schrecklich einrichten.
Diese folgenden Protokoll-definition (geht in Eure Einstellungen-Datei) definiert zwei Formatierer. Der ausführliche Spiele ein, die logging-format, Heroku selbst verwendet. Es definiert auch zwei Hundeführer, ein null-handler (sollte nicht genutzt werden müssen) und ein console-handler - die console-handler ist, was Sie verwenden möchten, mit Heroku. Der Grund dafür ist, dass die Protokollierung auf Heroku arbeiten durch eine einfache Strom-logger, Protokollierung der Ausgabe aus stdout/stderr. Schließlich habe ich definiert einen logger genannt testlogger - dieser Teil der logging-definition geht, wie die normalen für die Protokollierung von Definitionen.
Als Nächstes, wie Sie diese nutzen. In diesem einfachen Fall können Sie die folgende in eine beliebige andere Datei in Ihren Django-Projekt zu schreiben zu diesem speziellen logger definiert (
testlogger
). Denken Sie daran, dass der logger definition in unsere Einstellungen Datei, jede log-NachrichtINFO
oder höher ausgegeben werden.In meinem Fall, ich habe eine gültige Anmeldung Einstellung
Leider war es wird ignoriert, da an der Unterseite meiner Datei, die ich rief
War dies das überschreiben von mein logging-Einstellung, so war die Lösung
Dieser sieht aus, als wenn es vielleicht deaktivieren der Protokollierung, aber es ist eigentlich einfach überspringt heroku eigenen logging config.
Als seitliche Anmerkung, ich würde diesen code verwenden, wenn das Debuggen Django logging-Probleme, da sollte es mehr oder weniger immer die Arbeit mit dem Django defaults:
Sehen Django ' s Standard-logging config
Können Sie dann ändern Sie den logger, message-Ebene und der logging-Einstellungen, um die Arbeit herauszufinden, was genau das problem ist.
Müssen Sie zu "aktivieren" Ihr Logger manuell. Sie können dies tun, pro Modul, wie 'blog.Ansichten'. Es werden pick-up-Submodule, so melden Sie den ganzen blog-app, einfach mal in 'blog'.
Wenn Sie lassen Sie es leer, es wird alles loggen, was nicht behandelt werden, vor und mit propagate=True (nicht die Standardeinstellung). Dies wird auch log alle Django, das heißt auf debug-level erhalten Sie SQL-Abfragen in Ihre Protokolle.
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'stream': sys.stdout } }, 'loggers': { 'django': { 'handlers': ['console'], 'propagate': True, 'level': 'INFO', }, '': { 'handlers': ['console'], 'level': 'INFO', } } }
und es funktioniert immer noch nicht