Używamy kombinacji SLF4J + Logback w naszym projekcie od jakiegoś czasu i jesteśmy z niej całkiem zadowoleni, ale nasza strategia logowania jest dość prosta, wykorzystując proste loggery oparte na klasach i bez wymyślnych rzeczy, takich jak MDC lub Markery.
Chcę wiedzieć, czy ktoś w społeczności faktycznie korzysta z tych funkcji i jak są one wykorzystywane do ulepszania logowania / filtrowania.
Jestem szczególnie zainteresowany tym, gdzie, dlaczego i jak można używać [1] Markerów do logowania. Wydaje mi się, że jest to całkiem fajna funkcja dodawania kontekstu semantycznego do logowania - np. Podczas gdy klasa może obsługiwać wiele problemów, można użyć znaczników specyficznych dla zadania / obawy, aby rozróżnić zapisy dziennika.
Jakie mogą być najlepsze praktyki, konwencje lub strategie tworzenia i używania znaczników w logowaniu.
Aktualizacja: Wydaje mi się, że tak naprawdę nie chodzi mi o to, dlaczego używać znaczników, ale raczej o to, w jaki sposób - czy są jakieś dobre praktyki nazywania znaczników (np. Używanie zwykłego tekstu ze spacjami lub nazwami słów kluczowych rozdzielanymi myślnikami / podkreśleniem / interpunkcją ), czy powinna istnieć jakaś pula „standardowych nazw”, nazywających rzeczy w oparciu o funkcje biznesowe. Pytania, które prawdopodobnie potrafię sobie sam wymyślić, ale jeśli chcę systematycznie korzystać z tych funkcji i przedstawiać je zespołowi programistów, sensowne jest posiadanie jakiegoś sformalizowanego zestawu wskazówek dotyczących ...
[1] - Pytając, jak używać markerów, tak naprawdę nie pytam, jak używać API (jest to naprawdę dość proste) - odnoszę się raczej do bardziej ogólnego poziomu, jak można skonfigurować logowanie przy użyciu konsekwentnie markerów
Po pierwsze, MDC.
MDC jest naprawdę przydatne w środowisku, w którym masz jedną „jednostkę” powiązaną z pewnym zachowaniem. Typowy przykład: interakcja użytkownika z aplikacją internetową. Załóżmy więc, że masz wielu użytkowników bawiących się Twoją aplikacją internetową. Korzystając z MDC, możesz łatwo je śledzić bez większych kłopotów. Uproszczony przykład:
Tutaj używasz MDC w dwóch miejscach: jako nazwa użytkownika i jako identyfikator sesji. W ten sposób możesz łatwo grepować sesję jednego użytkownika, aby zobaczyć wszystko, co robili.
Po drugie, markery.
Znaczniki są zwykle używane w „szczególnych” okolicznościach, takich jak wysłanie wiadomości e-mail do administratora w przypadku poważnych krytycznych błędów. Nie wszystkie błędy zawsze należą do tej samej kategorii; z niektórymi trzeba postępować w odpowiedni sposób.
Lub, gdy użytkownik opuszcza twoją usługę, zwykle przechodzi do dziennika INFO, ale możesz również użyć znacznika dla takich instancji, jeśli chcesz, aby zdarzenia takie jak to były zapisywane w osobnym pliku dziennika, abyś mógł to monitorować łatwiejsze do statystycznego gromadzenia liczby rezygnujących użytkowników.
Praktyczna zasada:
źródło
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 (pierwszy bardziej powszechny niż drugi) do użycia markera.
Wyzwalanie : Niektórym aplikantom można poinstruować, aby podjęli działanie w obecności określonego znacznika. Na przykład
SMTPAppender
można skonfigurować wysyłanie wiadomości e-mail za każdym razem, gdy zdarzenie rejestrowania jest oznaczoneNOTIFY_ADMIN
znacznikiem, niezależnie od poziomu dziennika. Zobacz wyzwalanie oparte na znacznikach w dokumentacji logowania. Możesz także łączyć poziomy dziennika i znaczniki do wyzwalania.Filtrowanie : Możesz na przykład 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).
źródło
Podobnie jak dodatek, jeśli używasz logstash i masz włączone rejestrowanie json, istnieje inne potencjalne zastosowanie Markera - do rejestrowania zmiennych w celu powiązania z określonym komunikatem dziennika. Jest to bardziej spójne i łatwiejsze do przeanalizowania niż włączenie go do treści wiadomości. Bardzo przydatne, jeśli pasuje do twojego przypadku użycia.
Zobacz szczegóły tutaj:
https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event
źródło