4.1 Liste der Protokollierungsstufen
Sie haben Ihr Programm geschrieben, es auf den Server hochgeladen und dann haben Sie sofort Fragen:
- Wie kann sichergestellt werden, dass
debug()
die Methode während der Arbeit nicht funktioniertproduction
? - Die Protokolle enthalten zu viele Informationen. Möchten Sie nur Fehlermeldungen hinterlassen?
- Wie kann ich ein detailliertes Protokoll für einen Teil der Anwendung anzeigen?
Natürlich standen die Ersteller der Protokolle vor Jahrzehnten vor der gleichen Situation. Ich werde Ihnen nicht sagen, wie dieses Problem in der C-Sprache gelöst wurde, aber in der Java-Sprache wurde es sehr schön gelöst.
Das Protokoll filtert die Daten, bevor es die Informationen in die Datei schreibt . Sie können den Detaillierungsgrad des Protokolls sehr schnell reduzieren/erhöhen, indem Sie den Protokollierungslevel festlegen. Diese Ebenen werden in der folgenden Tabelle beschrieben:
Eben | Notiz | |
---|---|---|
1 | ALLE | Protokollieren Sie alle Nachrichten |
2 | VERFOLGEN | Kleine Meldung beim Debuggen |
3 | DEBUGGEN | Nachrichten, die für das Debuggen wichtig sind |
4 | DIE INFO | Einfache Nachrichten |
5 | WARNEN | Schreiben Sie nur Fatal, Error und Warning |
6 | FEHLER | Schreiben Sie nur Fehler und schwerwiegende Fehler |
7 | TÖDLICH | Schreiben Sie nur schwerwiegende Fehler |
8 | AUS | Schreiben Sie keine Nachrichten in das Protokoll |
Diese Ebenen werden beim Filtern von Nachrichten verwendet. Wenn Sie die Protokollierungsebene auf festlegen WARN
, werden alle Nachrichten WARN
verworfen, die weniger wichtig sind als: TRACE
, DEBUG
, INFO
. Wenn Sie die Filterstufe auf einstellen FATAL
, dann sogar ERROR
.
Es gibt zwei weitere Schweregrade, die beim Filtern verwendet werden: diese OFF
(alle Nachrichten verwerfen) und ALL
– alle Nachrichten schreiben (nichts verwerfen).
4.2 Beispiel für die Protokolleinrichtung
Schauen wir uns ein einfaches Beispiel für die Protokolleinrichtung an. Dazu benötigen wir die Datei log4j.properties, die im Ressourcenordner abgelegt werden kann. Fügen wir den folgenden Inhalt hinzu:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Hier legen wir in der allerersten Zeile die Protokollierungsstufe fest – WARN
. Und das bedeutet, dass Nachrichten, die mit Status an den Logger geschrieben werden, ignoriert werden DEBUG
.INFO
- Geben Sie an, welche Art von Appender wir verwenden werden -
ConsoleAppender
- Geben Sie an, wo wir das Protokoll schreiben werden -
System.out
- Wir legen die Klasse fest, die das Aufnahmeformat steuert –
PatternLayout
- Legen Sie das Aufnahmeformat für alle Nachrichten fest – Datum und Uhrzeit
4.3 Beliebte Protokollierungsfehler
Und noch ein wichtiger Punkt – häufige Fehler bei der Protokollierung. Es gibt nicht so viele Möglichkeiten, etwas zu tun, aber es lassen sich einige häufige Fehler identifizieren:
- Zu viel Protokollierung . Sie sollten nicht jeden Schritt protokollieren, was theoretisch wichtig sein kann. Es gibt eine Regel: Protokolle dürfen die Leistung nicht um mehr als 10 % belasten . Andernfalls kommt es zu Leistungsproblemen.
- Protokollierung aller Daten in einer Datei . Dies wird irgendwann dazu führen, dass das Lesen/Schreiben sehr schwierig wird, ganz zu schweigen davon, dass es auf bestimmten Systemen Dateigrößenbeschränkungen gibt.
- Verwendung der falschen Protokollierungsstufen . Jede Protokollierungsebene hat klare Grenzen und diese sollten respektiert werden. Wenn die Grenze unklar ist, können Sie sich auf die zu verwendende Ebene einigen.