Logger / Logging

Werbung
Logger / Logging
Florian Pfingstag
12.05.2015
Was sind Logger?
Logger sind . . .
• eine Methode, um Events oder Nachrichten zu dokumentieren.
• ein Weg die “Print” Funktion zu umgehen.
• Logger dokumentieren generell in einer Logfile.
• Logger werden unterschieden zwischen:
– Diagnostic-Logging
– Audit Logging
Beispiel für eine Logfile:
2015-05-10 20:54:05,933 DEBUG: Debug Message in example_output.py
2015-05-10 20:54:05,933 INFO: Info Message in example_output.py
2015-05-10 20:54:05,933 WARNING: Warning Message in example_output.py
2015-05-10 20:54:05,933 ERROR: Error Message in example_output.py
2015-05-10 20:54:05,934 CRITICAL: Failed in example_output.py
Traceback (most recent call last):
File "example_output.py", line 15, in <module>
100 / 0
ZeroDivisionError: integer division or modulo by zero
1
Logger vs. Print
• Die Print Funktion produziert möglicherweise ungewollt Output.
• Die Print Funktionen für Debugging müssen vor der Auslieferung entfernt
werden.
• Ein Logger kann einfach leise gestellt werden.
• Ein Logger kann unterschiedlich ausgegeben werden (Datei, std.out, per
E-Mail).
Wann also was verwenden?
• Print nur für primitiven Command-Line Output verwenden !
• Logger sind besser geeignet für:
– Events, die während der normalen Laufzeit eintreten.
– auftretende Warnungen während der Laufzeit.
– unterdrückte Fehler, die nicht zum Stop führen.
• Bei Fehlern, die zum Stop führen, sollten Exceptions beibehalten werden.
Logger in Python
Logger haben folgende Level:
• critical - 50
• error - 40
• warning - 30
• info - 20
• debug -10
Jeder Logger zeigt nur Meldungen seines Levels und darüber.
Es gibt drei Wege zur Konfiguration:
• INI-Datei
2
– Pro: Updates während der Laufzeit (über Sockets).
– Kontra: weniger Kontrolle über den Logger (subclassed Filter/Logger)
• DICT oder JSON Format
– Pro: Ist durch JSON Modul von einer Datei importierbar.
– Kontra: Ebenfalls weniger Kontrolle über den Logger.
• fest codiert
– Pro: komplette Kontrolle über den Logger.
– Kontra: Sourcecode muss eventuell verändert werden.
Beispiele zu INI, JSON, YAML
Ein Beispiel für festcodierte Logger:
Standard Name des Loggers ist dann root.
>>> import logging
>>> logging.basicConfig(level=logging.LEVEL,
#Basis Konfiguration
filename='LOGGING_OUT', #Standard ist sys.stdout
format='FORMAT')
#Standard: Level, Name
Log Einträge erstellt man durch den Aufruf:
logging.info("MESSAGE") #Produziert log auf level "info" mit MESSAGE
Handler
Handler bestimmen das Ausgabemedium.
•
•
•
•
•
Stream Handler -> für sys.stdout, stderr o.ä.
File Handler -> für Senden an eine Datei
Rotating File Handler -> für mehrere Dateien ( auch Timed )
Socket Handler -> senden an Netzwerk
SMTP Handler -> senden per Mail
3
• HTTP Handler -> senden an Web Server
Weitere Handler
Ein Logger kann mehrere Handler haben.
Einen eigenen Logger erstellt man durch:
import logging
import logging.handlers
LOGGING_OUT = 'rotating_file.log'
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
Rotating File Handler um bei mehreren Aufrufen eine neue Datei zu
erstellen:
rf_handler = logging.handlers.RotatingFileHandler(LOGGING_OUT, \
maxBytes=20, backupCount=3)
my_logger.addHandler(rf_handler)
my_logger.debug('test')
Mehr zu Handlern
Formatierung der Logger
Formatter bestimmen das Format der Ausgabe.
• Standard Format in Python ist
– < level>:< LoggerN ame>:< N achricht>.
• Formatter werden auf die Handler angewandt.
• Ein Handler kann nur ein Format haben.
• Standard Web-Log Format ist das Common Log Format:
– IP, user-identifier, user id, date+time+timezone, client_request,
HTTP status, size of object
4
Logger im Format Time, Level, Message, Path erstellt man durch:
import logging
from logging import Formatter
my_logger = logging.getLogger('MyLogger')
formatter = logging.Formatter('%(asctime)s %(levelname)s:\
%(message)s in %(pathname)s')
file_handler = logging.FileHandler('formatted_log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(formatter)
my_logger.addHandler(file_handler)
my_logger.error('message')
Mehr zu Formattern
Wie gehört was zusammen?
Logger -> Handler -> Formatter
Logger Flow
Fragen?
Quellen:
•
•
•
•
•
•
•
Victor Lin’s good logging practice
Python module of the week
Python Dokumentation Logger
Python Dokumentation HowTo
Hitchhikers Guide to logging in Python
Logger-Flow Bild
Logger Bild
5
Herunterladen