Co to są znaczniki w platformach Java Logging i jaki jest powód ich używania?

110

Pierwszy raz słyszę o markerach podczas czytania:

http://slf4j.org/faq.html

Sprawdzam dostępne metody dla obiektu Logger :

i znalezione interfejsy:

Więcej szczegółowych informacji otrzymałem od:

ale nadal zdezorientowany ... Zauważ, że pytam dlaczego , a nie jak ich używać, więc nie jest to duplikat:

UPDATE Wygląda na to, że kiedy używasz markerów, musisz również napisać niestandardowy kod Java zamiast konfigurować w plikach XML lub .property ...

AKTUALIZACJA 2 Z 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
źródło
Aby używać markerów, musisz użyć interfejsu API znaczników dostarczonego przez SLF4J. Czy to masz na myśli mówiąc „niestandardowy kod Java”?
Ceki
@Ceki Wydaje się, że używając tylko Logger.warn (Marker, MSG) nie daje żadnych korzyści, dopóki nie napisał niestandardową klasę dla filtrów i zarejestrować je ... Zwykły składnia logback.xml mieć żadnych specjalnych umiejętności do pracy z Marker (tylko drukuj je po % markerem )
gavenkoa
1
Co jest „specjalnego” w tym, co jest przedstawione na logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki
@Ceki Dzięki za punkt! Czy to tylko jedno miejsce, w którym można używać markerów?
gavenkoa
1
@Ceki Teraz, gdy używamy Elasticsearch, jest to sposób na oznaczanie specjalnych wydarzeń. Wstępnie zdefiniowane markery przechowujemy w dedykowanej klasie do ponownego wykorzystania. Nie było to oczywiste, gdy po prostu używasz grepdzienników tekstowych.
gavenkoa

Odpowiedzi:

118

To jest przerobiona wersja mojej odpowiedzi na pytanie " Najlepsze praktyki używania Markerów w SLF4J / Logback ".

Markerów można używać do pokolorowania lub oznaczenia pojedynczego wyciągu dziennika. To, co zrobisz z tymi kolorami, czyli markerami, zależy wyłącznie od Ciebie. Jednak wydaje się, że dwa wzorce są wspólne dla użycia markera.

  1. Wyzwalanie : Niektórym aplikantom można poinstruować, aby podjęli działanie w obecności określonego znacznika. Na przykład SMTPAppendermożna skonfigurować wysyłanie wiadomości e-mail za każdym razem, gdy zdarzenie rejestrowania jest oznaczone NOTIFY_ADMINznacznikiem, niezależnie od poziomu dziennika. Zobacz wyzwalanie oparte na znacznikach w dokumentacji logowania. Możesz także łączyć poziomy dziennika i znaczniki do wyzwalania.

  2. Filtrowanie : znaczniki są bardzo przydatne do wyróżniania niektórych wartościowych zapisów dziennika. Na przykład możesz pokolorować / oznaczyć wszystkie dzienniki związane z trwałością (w różnych i wielu plikach klas) kolorem „DB”. Możesz wtedy filtrować według „DB”: wyłącz rejestrowanie z wyjątkiem instrukcji dziennika oznaczonych jako DB. Aby uzyskać więcej informacji, zapoznaj się z rozdziałem o filtrach w dokumentacji dziennika zwrotnego (wyszukaj MarkerFilter). Zwróć uwagę, że filtrowanie znaczników można przeprowadzić nie tylko przez wylogowanie, ale także za pomocą narzędzi do analizy dziennika.

Przed pojawieniem się Markerów, aby osiągnąć podobne zachowanie, mieliśmy możliwość 1) używania niestandardowych poziomów 2) używania zmodyfikowanych nazw rejestratorów. SLF4J API obecnie nie obsługuje poziomów niestandardowych. Podobnie jak w przypadku opcji 2, sufiksowanie (lub prefiksowanie) nazw rejestratorów jest możliwe, jeśli jeden lub dwa rejestratory wymagają modyfikacji. Podejście to staje się niepraktyczne, gdy tylko 3 lub więcej rejestratorów musi zostać podzielonych na podklasy, ponieważ powiązane pliki konfiguracyjne stają się niemożliwe do zarządzania.

Mimo że pojedynczy znacznik może być już bardzo przydatny, następna wersja SLF4J, tj. Wersja 2.0, pozwoli na użycie wielu znaczników w jednym wyciągu dziennika.

Ceki
źródło
1
Może być również używany w SiftingAppender do dyskryminatora stackoverflow.com/a/30552012/1012497
nikli