Logging
Log-Level
import logging logging.debug("Hello world") logging.info("I just want you to know...") logging.warning("Someone should look at this") logging.error("This should not happen") logging.critical("Something went terribly wrong") logging.exception("3 Errors walk into a bar. The barman says: Normally I'd Throw you all out, but tonight I'll make an Exception.")
Wenn man den Root-Logger nutzt (wie in diesem Beispiel gezeigt), werden erst Log-Meldung ab Level WARNING ausgegeben.
Konfiguration
Die einfachste Möglichkeit, den Root-Logger zu konfigurieren, ist die Funktion logging.config.DictConfig()
.
import logging.config LOG_CONFIG = {"version": 1, "disable_existing_loggers": False, "formatters": {"custom": {"format": "%(asctime)s %(levelname)s %(message)s"}}, "handlers": {"default": {"class": "logging.StreamHandler", "formatter": "custom"}}, "loggers": {"": {"level": "DEBUG", "handlers": ["default"]}}} logging.config.dictConfig(LOG_CONFIG)
Man beachte, dass der Key für den Root-Logger im Dictionary loggers ein leerer String ist!
Syslog
Mit logging.handlers.SysLogHandler
existiert bereits eine Möglichkeit, die Log-Meldung zu
einem Syslog-Daemon weiter zu leiten. Allerdings versucht dieser sich, wenn nicht anderweitig
parametrisiert, per UDP zu verbinden, was üblicherweise unter Linux nicht aktiviert ist. Statt
dessen gibt es einen Unix-Domain-Socket /dev/log
. Glücklicherweise kann man dem Handler
beibringen, diesen Socket zu nutzen. Eine Dictionary für die Konfiguration (s.o.) könnte z.B.
folgendermaßen aussehen:
LOG_CONFIG = {"version": 1, "disable_existing_loggers": False, "formatters": {"custom": {"format": "%(message)s"}}, "handlers": {"syslog": {"class": "logging.handlers.SysLogHandler", "formatter": "custom", "address": "/dev/log", "facility": "daemon"}}, "loggers": {"": {"level": "DEBUG", "handlers": ["syslog"]}}}
Weitere Möglichkeiten
Das Modul logging
ist sehr mächtig. Es gibt z.B. einen Logging-Handler, der die
Log-Meldungen in eine Datei schreibt und automatisch entsprechend der angegebenen
Konfiguration auf dieser ein Log-Rotate ausführt. Auch kann man verschiedene Logger mit
unterschiedlichen Handlern parallel verwenden. Die auf dieser Seite gezeigten Beispiele
sind nur als Einstieg gedacht, ansonsten wird auf die Modul-Dokumentation verwiesen.