Es gibt einige Dinge, die Sie auf den ersten Blick nicht über die Protokollierungsfunktion von Django verstehen. Besonders die Konfigurationsdatei. Ich werde es leicht und präzise zusammenfassen.
Es ist eine Protokolleinstellung, aber wenn Sie sie nicht selbst festlegen (wenn in settings.py keine Definition von LOGGING vorhanden ist) [Standardeinstellung in Django-Quelle enthalten](https://github.com/django/django/ blob / master / django / utils / log.py) wird verwendet. Das Ausgabeprotokoll ist jedoch nicht sehr einfach zu sehen, sodass Sie es in den meisten Fällen selbst festlegen. Das folgende Beispiel zeigt eine Einstellung unter der Annahme einer Produktionsumgebung. Fügen Sie den folgenden Inhalt zu settings.py hinzu.
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
#Einstellungen für das Protokollausgabeformat
'formatters': {
'production': {
'format': '%(asctime)s [%(levelname)s] %(process)d %(thread)d '
'%(pathname)s:%(lineno)d %(message)s'
},
},
#Handler-Einstellungen
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/var/log/{}/app.log'.format(PROJECT_NAME),
'formatter': 'production',
},
},
#Logger-Einstellungen
'loggers': {
#Ein Logger, der Protokolle für alle von Ihnen hinzugefügten Anwendungen aufnimmt
'': {
'handlers': ['file'],
'level': 'INFO',
'propagate': False,
},
#Ein Logger, der alle von Django selbst ausgegebenen Protokolle aufnimmt
'django': {
'handlers': ['file'],
'level': 'INFO',
'propagate': False,
},
},
}
views.py
import logging
logger = logging.getLogger(__name__)
logger.info("log info test!")
logger.error("log error test!")
Das Protokoll hat je nach Wichtigkeit 5 Ebenen. Sie können das Protokoll ausgeben, indem Sie den Logger die Methode mit demselben Namen wie die Protokollebene wie im obigen Verwendungsbeispiel ausführen lassen.
Name | Verwenden |
---|---|
DEBUG | Debug-Aufzeichnung |
INFO | Aufzeichnung des normalen Betriebs |
WARNING | Warnhinweis |
ERROR | Schwerwiegende Probleme wie Fehler |
CRITICAL | Schwerwiegende Probleme wie das Stoppen des Systems |
disable_existing_loggers Im Fall von Ture werden alle nicht in der Konfigurationsdatei definierten Logger deaktiviert. In diesem Stadium fragen Sie sich möglicherweise "Was ist ein Logger, der nicht in der Einstellungsdatei definiert ist?". Die Bedeutung ist jedoch, dass alle Logger mit Namen, die nicht im später beschriebenen Element ** logger ** definiert sind, deaktiviert sind. Getan werden. ** Grundsätzlich ist False OK **, wurde jedoch in diesem Artikel ausführlich überprüft. Überprüfen Sie daher bitte, ob Sie interessiert sind.
formatters Formatierung der Protokollausgabe. Wenn Sie es hier richtig einstellen, wird das Ausgabeformat des Protokolls ausgerichtet und das Protokoll ist leichter zu sehen, sodass Sie denken können, dass eine ** Einstellung erforderlich ist **. Was bedeuten% (asctime) und% (levelname) in Official Documents auf Japanisch Es wird leicht verständlich beschrieben.
handlers Dies ist die Einstellung für die Protokollausgabemethode.
loggers Dies ist die Logger-Einstellung, die tatsächlich von der App verwendet wird. Der durch "''" definierte Logger ist eine Beschreibung, die dem Ausgabebeispiel folgt.
import logging
logger = logging.getLogger(__name__)
Sie können es von jeder Anwendung erhalten. Grundsätzlich reicht es aus, diese und die Logger-Einstellung zu haben, die Django selbst ausgibt.
Das Folgende ist eine Erklärung der Ausbreitung. Der Logger kann tatsächlich einen ** Namespace ** haben. Definieren Sie als Beispiel 'logA'und'logA.logB' wie unten gezeigt.
'logger': {
'logA': {
'handlers': ['file'],
'level': 'INFO',
'propagate': False,
},
'logA.logB': {
'handlers': ['file'],
'level': 'INFO',
'propagate': False,
},
Holen Sie sich dann den Logger wie folgt aus der Anwendung.
views.py
import logging
logger = logging.getLogger('logA.logB.logC')
logger.info("log info test!")
Zu diesem Zeitpunkt ist logC nicht definiert, daher wird ** logB ** als Ergebnis erfasst. Wenn der angegebene Logger nicht vorhanden ist, wird der oben genannte Namespace aufgerufen und der erste gefunden.
Hier, wenn logB und logC ebenfalls definiert sind und die Eigenschaft True ist, für alle logA, logB, logC
logger.info("log info test!")
Wird ausgeführt. Mit anderen Worten, wenn die Einstellungen von logA, logB und logC bis auf den Namen identisch sind, werden ** Protokolle mit genau demselben Inhalt dreimal ausgegeben **. Als Name der Weitergabe wird der Protokollausgabebefehl auch an den Protokollierer in der oberen Hierarchie weitergegeben. Legen Sie als Verwendung logA für die Dateiausgabe, logB für die Konsolenausgabe fest, rufen Sie logA ab, wenn Sie nur die Datei benötigen, rufen Sie logB ab, wenn Sie in der Entwicklungsumgebung auf die Konsole ausgeben möchten usw. Ist es ein solches Bild (ich habe es nie benutzt ...).
das ist alles. Am Ende war der Inhalt etwas kompliziert, aber wenn Sie nichts Kompliziertes tun, sind die Grundeinstellungen meiner Meinung nach nur mit dem in diesem Artikel beschriebenen Inhalt in Ordnung. Vielen Dank für Ihre harte Arbeit: cat2:
Recommended Posts