Dies ist eine alte Version des Dokuments!


Logging

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.

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!

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"]}}}

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.

  • Zuletzt geändert: 2019-03-31 13:24