Django
Protokollierung
Suche…
Protokollierung beim Syslog-Dienst
Es ist möglich, Django so zu konfigurieren, dass das Protokoll an einen lokalen oder Remote-Syslog-Dienst ausgegeben wird. Diese Konfiguration verwendet den in Python eingebauten SysLogHandler .
from logging.handlers import SysLogHandler
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format' : "[YOUR PROJECT NAME] [%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
'syslog': {
'class': 'logging.handlers.SysLogHandler',
'formatter': 'standard',
'facility': 'user',
# uncomment next line if rsyslog works with unix socket only (UDP reception disabled)
#'address': '/dev/log'
}
},
'loggers': {
'django':{
'handlers': ['syslog'],
'level': 'INFO',
'disabled': False,
'propagate': True
}
}
}
# loggers for my apps, uses INSTALLED_APPS in settings
# each app must have a configured logger
# level can be changed as desired: DEBUG, INFO, WARNING...
MY_LOGGERS = {}
for app in INSTALLED_APPS:
MY_LOGGERS[app] = {
'handlers': ['syslog'],
'level': 'DEBUG',
'propagate': True,
}
LOGGING['loggers'].update(MY_LOGGERS)
Django-grundlegende Protokollierungskonfiguration
Intern verwendet Django das Python-Protokolliersystem. Es gibt viele Möglichkeiten, die Protokollierung eines Projekts zu konfigurieren. Hier ist eine Basis:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%Y-%m-%d %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'default'
},
},
'loggers': {
'django': {
'handlers': ['console'],
'propagate': True,
'level': 'INFO',
},
}
}
Formatters
Es kann verwendet werden, um die Darstellung der Protokolle zu konfigurieren, wenn sie zur Ausgabe gedruckt werden. Sie können viele Formatierer definieren, indem Sie für jeden Formatierer eine Schlüsselzeichenfolge festlegen. Ein Formatierer wird dann verwendet, wenn ein Handler deklariert wird.
Handler
Kann verwendet werden, um zu konfigurieren, wo die Protokolle gedruckt werden. Im obigen Beispiel werden sie an stdout und stderr gesendet. Es gibt verschiedene Handler-Klassen:
'rotated_logs': {
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/var/log/my_project.log',
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 5,
'formatter': 'default'
'level': 'DEBUG',
},
Dadurch werden Protokolle in der Datei erstellt, die nach filename
geterget werden. In diesem Beispiel wird eine neue Protokolldatei erstellt, wenn der aktuelle Wert die Größe von 5 MB erreicht (die alte wird in my_project.log.1 umbenannt), und die letzten 5 Dateien werden für das Archiv aufbewahrt.
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
Dadurch wird jedes Protokoll per E-Mail an Benutzer gesendet, die in der ADMINS
Einstellungsvariablen angegeben sind. Die Ebene ist auf ERROR
, sodass nur Protokolle mit der Ebene ERROR
per E-Mail gesendet werden. Dies ist äußerst nützlich, um über mögliche Fehler 50x auf einem Produktionsserver informiert zu werden.
Andere Handler können mit Django verwendet werden. Für eine vollständige Liste lesen Sie bitte die entsprechende Dokumentation . Wie Formatierungsprogramme können Sie in einem Projekt viele Handler definieren, die jeweils eine andere Schlüsselzeichenfolge festlegen. Jeder Handler kann in einem bestimmten Logger verwendet werden.
Logger
In LOGGING
konfigurieren LOGGING
als letzten Teil für jedes Modul die minimale Protokollierungsstufe, die zu verwendenden Handler usw.