Logging
Das Modul der Standard Bibliothek ist vollständig und einfach zu benutzen.
import logging
logging.info("info log")
Die folgende Log Level werden unterstützt, WARNING ist der Standardwert:
DEBUG, INFO, WARNING, ERROR, CRITICAL
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logging.info("info log")
Um in eine Datei service.log
zu schreiben, gibt man diese bei der Konfiguration mit an.
import logging
logging.basicConfig(filename='service.log', level=logging.DEBUG)
logging.debug('This message should go to the log file')
Das Logging konfiguriert man mit dem Hinzufügen von Handler und Formatter.
import logging
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root = logging.getLogger()
root.setLevel(logging.INFO)
root.addHandler(handler)
logging.info("info log")
Es gibt drei Wege das Logging zu konfigurieren, als Python Code, als Konfigurationsdatei oder als Konfigurations Dict.
import logging
import logging.config
logging.config.fileConfig('logging.conf')
logging.info("info log")
Eine logging.conf
Datei könnte die folgende Form haben.
[loggers]
keys=root
[handlers]
keys=console_handler
[formatters]
keys=simple_formatter
[logger_root]
level=DEBUG
handlers=console_handler
[handler_console_handler]
class=StreamHandler
level=DEBUG
formatter=simple_formatter
args=(sys.stderr,)
[formatter_simple_formatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
Mit dictConfig()
kann man JSON oder YAML verwenden und es zu einem Dict konvertieren.
import logging
import logging.config
logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'default': {'format': '%(asctime)s - %(levelname)s - %(message)s', 'datefmt': '%Y-%m-%d %H:%M:%S'}
},
'handlers': {
'stdout': {
'class': 'logging.StreamHandler',
'formatter': 'default',
'stream': 'ext://sys.stdout'
},
},
'loggers': {
'': {
'level': 'INFO',
'handlers': ['stdout']
}
}
})
logging.info("info log")
Handler
Der StreamHandler nutzt sys.stderr
wenn nichts weiteres angegeben ist.
Der FileHandler definiert eine Datei in die geschrieben wird.
Der NullHandler hat keine Formatierung oder eine Ausgabe, kann verwendet werden um Bibliotheken zu schreiben.
Der RotatingFileHandler definiert die Größe und Anzahl der Log Dateien. Hier haben die Log Dateien eine Größe von 500 bytes und wir behalten 3 Backups (service.log.n).
import logging.handlers as handlers
logHandler = handlers.RotatingFileHandler('service.log', maxBytes=500, backupCount=3)
Der TimedRotatingFileHandler definiert wann eine neue Datei erstellt wird, hier jede Stunde.
import logging.handlers as handlers
logHandler = handlers.TimedRotatingFileHandler('service.log', when='H', interval=1, backupCount=5)
Es gibt noch mehr Handler die zum Beispiel Log Einträge als HTTP an einen Server senden.