Was sind Marker in Java Logging Frameworks und was ist ein Grund, sie zu verwenden?

110

Zum ersten Mal höre ich beim Lesen von Markern:

http://slf4j.org/faq.html

Ich überprüfe die verfügbaren Methoden für das Logger- Objekt:

und gefundene Schnittstellen:

Weitere Informationen bekomme ich von:

aber immer noch verwirrt ... Beachten Sie, dass ich frage, warum , nicht wie man sie benutzt, also ist dies kein Duplikat von:

UPDATE Scheint, als müssten Sie bei Verwendung von Markern auch benutzerdefinierten Java-Code schreiben, anstatt die Konfiguration in XML- oder .property- Dateien vorzunehmen ...

UPDATE 2 Von http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));
Gavenkoa
quelle
Um Marker verwenden zu können, müssen Sie die von SLF4J bereitgestellte Marker-API verwenden. Ist es das, was Sie unter "benutzerdefiniertem Java-Code" verstehen?
Ceki
@Ceki Scheint, dass die Verwendung von nur Logger.warn (Marker, msg) Ihnen keinen Vorteil gebracht hat, bis Sie eine benutzerdefinierte Klasse für Filter geschrieben und diese registriert haben ... Die einfache Syntax von logback.xml hat keine besonderen Fähigkeiten, mit Marker zu arbeiten (nur
drucke
1
Was ist "besonders" an dem, was unter logback.qos.ch/manual/appenders.html#OnMarkerEvaluator präsentiert wird ?
Ceki
@ Keki Danke für den Punkt! Ist es nur ein Ort, an dem Marker verwendet werden können?
Gavenkoa
1
@Ceki Jetzt, da wir Elasticsearch verwenden, können Sie damit besondere Ereignisse markieren. Wir halten vordefinierte Marker in einer speziellen Klasse zur Wiederverwendung. Es war nicht offensichtlich, wenn Sie nur grepTextprotokolle verwenden.
Gavenkoa

Antworten:

116

Dies ist eine überarbeitete Version meiner Antwort auf die Frage " Best Practices für die Verwendung von Markern in SLF4J / Logback ".

Markierungen können verwendet werden , Farbe ein oder markieren einzelne Log - Anweisung. Was Sie mit diesen Farben, dh Markern, machen, liegt ganz bei Ihnen. Zwei Muster scheinen jedoch für die Verwendung von Markern üblich zu sein.

  1. Auslösen : Einige Appender könnten angewiesen werden, bei Vorhandensein eines bestimmten Markers eine Aktion auszuführen. Zum Beispiel SMTPAppenderkann eine E - Mail senden , so konfiguriert werden , wenn ein Protokollereignis mit dem markiert NOTIFY_ADMINMarker unabhängig von der Protokollebene. Siehe markergestütztes Triggern in der Logback-Dokumentation. Sie können auch Protokollebenen und Markierungen zum Auslösen kombinieren.

  2. Filtern : Marker sind sehr nützlich, um bestimmte wertvolle Protokollanweisungen hervorzuheben. Beispielsweise können Sie alle Ihre persistenzbezogenen Protokolle (in verschiedenen und mehreren Klassendateien) mit der Farbe "DB" färben / markieren. Sie können dann nach "DB" filtern: Deaktivieren Sie die Protokollierung mit Ausnahme der mit DB gekennzeichneten Protokollanweisungen. Weitere Informationen finden Sie im Kapitel über Filter in der Logback-Dokumentation (Suche nach MarkerFilter). Beachten Sie, dass das Filtern nach Markern nicht nur durch Protokollierung, sondern auch durch Protokollanalyse-Tools durchgeführt werden kann.

Vor dem Aufkommen von Markern hatten Sie die Möglichkeit, 1) benutzerdefinierte Ebenen zu verwenden, 2) modifizierte Loggernamen zu verwenden, um ein ähnliches Verhalten zu erzielen. Die SLF4J-API unterstützt derzeit keine benutzerdefinierten Ebenen. Bei Option 2 kann das Suffixieren (oder Präfixieren) von Loggernamen verwendet werden, wenn ein oder zwei Logger geändert werden müssen. Der Ansatz wird unpraktisch, sobald 3 oder mehr Logger "unterklassifiziert" werden müssen, da die zugehörigen Konfigurationsdateien nicht mehr verwaltet werden können.

Obwohl ein einzelner Marker bereits sehr nützlich sein kann, erlaubt die nächste Version von SLF4J, dh Version 2.0, mehrere Marker pro Protokollanweisung.

Ceki
quelle
1
Kann auch in SiftingAppender für Diskriminatoren verwendet werden stackoverflow.com/a/30552012/1012497
nikli