Ich kann anscheinend nicht herausfinden, wie ein "Standard" -Logger für meine Django-Installation eingerichtet wird. Ich möchte die neue LOGGING
Einstellung von Django 1.3 in verwenden settings.py
.
Ich habe mir das Beispiel des Django-Protokollierungsdokuments angesehen , aber es sieht für mich so aus, als würden sie nur Handler einrichten, die die Protokollierung für bestimmte Protokollierer durchführen. In ihrem Beispiel richten sie den Handler für die Logger mit den Namen 'django', 'django.request' und 'myproject.custom' ein.
Ich möchte lediglich einen Standard logging.handlers.RotatingFileHandler
einrichten, der standardmäßig alle Logger verarbeitet. Das heißt, wenn ich irgendwo in meinem Projekt ein neues Modul my_app_name.my_new_module
erstelle und es mit etwas wie: gekennzeichnet ist , sollte ich in der Lage sein, dies zu tun und alle Protokolle zu den rotierenden Dateiprotokollen zu führen.
# In file './my_app_name/my_new_module.py'
import logging
logger = logging.getLogger('my_app_name.my_new_module')
logger.debug('Hello logs!') # <-- This should get logged to my RotatingFileHandler that I setup in `settings.py`!
logs/
zuerst den Ordner erstellen :-). Andernfalls wird beim Ausführen eine Fehlermeldung angezeigt./manange.py runserver
. @ Chris W. Vielen Dank für Ihre Beispiel-Protokollierungseinstellungen. Es hat mir sehr geholfen!logger = logging.getLogger('foo'); logger.warn('bar');
dann wird derdefault
Handler diese Protokollierung abfangen und so etwas<time> WARN: foo: bar
wird inlogs/mylog.log
Wie Sie in Ihrer Antwort gesagt haben , Chris, besteht eine Option zum Definieren eines Standardloggers darin, die leere Zeichenfolge als Schlüssel zu verwenden.
Ich denke jedoch, dass der beabsichtigte Weg darin besteht, einen speziellen Logger unter dem
root
Schlüssel des Logging-Konfigurationswörterbuchs zu definieren . Ich habe dies in der Python-Dokumentation gefunden :Hier ist die Konfiguration aus Ihrer Antwort geändert, um den
root
Schlüssel zu verwenden:Um fair zu sein, kann ich keinen Unterschied im Verhalten zwischen den beiden Konfigurationen feststellen. Es scheint, dass das Definieren eines Loggers mit einem leeren Zeichenfolgenschlüssel den Root-Logger ändert, da
logging.getLogger('')
der Root-Logger zurückgegeben wird.Der einzige Grund , warum ich es vorziehen ,
'root'
über''
ist , dass es zu dem Bearbeiten des Root - Logger explizit ist. Wenn Sie neugierig waren,'root'
überschreiben''
Sie , wenn Sie beide definieren, nur weil der Stammeintrag zuletzt verarbeitet wird.quelle
root
Eintrag in die Wurzel des Diktats zu verschieben, während der Übergang von der 2.6 fileConfig-Logik zur 2.7 dictConfig eins reibungslos verläuft.nach dem Hinzufügen:
Wir können das Format ändern in:
oder
quelle
Ich habe ein kurzes Beispiel erstellt, um zu überprüfen, welche Konfiguration verwendet wird, wenn sowohl der
root
Schlüssel als auch der leere''
Logger in config dict referenziert werden.Druckt das folgende Ergebnis:
Dies zeigt an, dass die Konfiguration unter
root
Schlüssel die höchste Priorität hat. Wenn der Block entfernt wird, ist das Ergebnis:In beiden Fällen konnte ich debuggen und feststellen, dass alle drei Logger (
l1
,l2
undroot
) auf dieselbe Logger-Instanz, den Root-Logger, verwiesen haben.Ich hoffe, das hilft anderen, die wie ich durch die zwei verschiedenen Möglichkeiten zur Konfiguration des Root-Loggers verwirrt waren.
quelle