Ich liebe das wirklich so sehr, hier ist dein Arbeitsbeispiel! Im Ernst, das ist großartig!
Beginnen Sie, indem Sie dies in Ihre settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'logfile': {
'level':'DEBUG',
'class':'logging.handlers.RotatingFileHandler',
'filename': SITE_ROOT + "/logfile",
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console':{
'level':'INFO',
'class':'logging.StreamHandler',
'formatter': 'standard'
},
},
'loggers': {
'django': {
'handlers':['console'],
'propagate': True,
'level':'WARN',
},
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
'MYAPP': {
'handlers': ['console', 'logfile'],
'level': 'DEBUG',
},
}
}
Was bedeutet das alles?
- Formatierer Ich mag es, wenn es im gleichen Stil wie ./manage.py runserver herauskommt
- Handler - Ich möchte zwei Protokolle - eine Debug-Textdatei und eine Infokonsole. Auf diese Weise kann ich mich (falls erforderlich) wirklich vertiefen und in einer Textdatei nachsehen, was unter der Haube passiert.
- Logger - Hier legen wir fest, was wir protokollieren möchten. Im Allgemeinen erhält django WARN und höher - die Ausnahme (daher propagieren) sind die Backends, in denen ich die SQL-Aufrufe gerne sehe, da sie verrückt werden können. Als letztes habe ich zwei Handler und schiebe alles darauf.
Wie aktiviere ich MYAPP, um es zu verwenden ...
Fügen Sie dies gemäß der Dokumentation oben in Ihre Dateien ein (views.py).
import logging
log = logging.getLogger(__name__)
Dann tun Sie dies, um etwas herauszuholen.
log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")
Die Protokollebenen werden hier und für reines Python hier erklärt .
settings.py
, dhMYAPP
in diesem Beispiel, auch der Parameter im Aufruf von seinlogging.getLogger
. Wenn Ihr Projekt viele in sich geschlossene Apps enthält und Sie möchten, dass sie einen gemeinsamen Logger verwenden, müssen Sielogging.getLogger('MYAPP')
stattdessenlogging.getLogger(__name__)
Basierend auf der von rh0dium vorgeschlagenen Protokollierungskonfiguration und einigen weiteren Recherchen, die ich selbst durchgeführt habe, begann ich, ein Beispiel-Django-Projekt mit netten Protokollierungsstandards zusammenzustellen - fail- nice -django .
Beispiel für die Ausgabe einer Protokolldatei:
Die detaillierte Verwendung wird in der README-Datei erläutert. Im Wesentlichen kopieren Sie das Logger- Modul in Ihr Django-Projekt und fügen es
from .logger import LOGGING
am Ende Ihrer settings.py hinzu .quelle