Najlepsze praktyki stosowania znaczników w SLF4J / Logback

W naszym projekcie od jakiegoś czasu używamy kombinacji SLF4J+Logback i jesteśmy z niej całkiem zadowoleni, ale nasza strategia logowania jest dość prosta, używając prostych klasowych loggerów i bez wymyślnych rzeczy, takich jak MDC czy markery.

Chcę wiedzieć, czy ktoś w społeczności faktycznie korzysta z tych funkcji i jak są one wykorzystywane do poprawy rejestrowania / filtrowania.

Szczególnie interesuje mnie gdzie, dlaczego i jak można by użyć[1] znaczniki do logowania. Uderzają mnie jako całkiem zgrabna funkcja dodawania kontekstu semantycznego do logowania - np. podczas gdy klasa może obsługiwać wiele obaw, można użyć znaczników specyficznych dla zadań/obaw do rozróżnienia instrukcji log.

Jakie mogą być najlepsze praktyki, konwencje lub strategie tworzenia i używania znaczników w logowaniu.

Update: myślę, że tak naprawdę chodzi mi nie tyle Dlaczego używać markerów, ale raczej Jak - czy są jakieś dobre praktyki nazywania znaczniki (np. użycie zwykłego tekstu ze spacjami lub rozdzielonymi znakami dash/underscore/interpunkcją nazw stylów słów kluczowych), powinny istnieć pewnego rodzaju Pula "standardowych nazw", nazywających rzeczy w oparciu o funkcje biznesowe. Pytania, które prawdopodobnie mogę sobie wymyślić, ale jeśli chcę systematycznie korzystać z tych funkcji i przedstawiać je zespołowi programistów, sensowne jest posiadanie jakiegoś formalizowalnego zestawu wytycznych...


[1] - pytając Jak używać markerów Nie bardzo pytam, jak korzystać z API ( jest to naprawdę całkiem proste) - mam raczej na myśli bardziej ogólny poziom jak można skonfigurować logowanie przy użyciu markerów konsekwentnie

Author: Roland Tepp, 2010-11-12

4 answers

Po pierwsze, jak powiedział @darioo:

  • MDC służy do kojarzenia wielu zdarzeń z kilkoma "encjami"
  • [znaczniki] są używane do" specjalnych " wydarzeń, które chcesz przefiltrować ze zwykłych

Więc twoje twierdzenie, że chcesz użyć MDC do tego. Znaczniki służą do podkreślania" specjalnych "wydarzeń-filtrowania, jeśli wolisz-zamiast "krojenia". Możesz na przykład wycinać na podstawie konkretnego użytkownika, ale filtrować na podstawie nieoczekiwanych WYJĄTKÓW. W tym przypadku, ty tworzy User MDC dimension i Unexception Marker.


Ale to najwyraźniej nie odpowiada na pytanie, które miałeś na myśli. Jesteś " raczej odnosi się do bardziej ogólnego poziomu, jak można skonfigurować logowania przy użyciu markerów konsekwentnie."Więc zajmijmy się tym:

MDC służy do krojenia i kostkowania , a markery dofiltrowania . czynności te są wykonywane podczas testowania i produkcji. Jako w ten sposób musisz zdecydować, jakich wymiarów oczekujesz, aby pokroić dane dziennika i które przypadki mogą być przydatne do filtrowania, gdy pojawi się testowanie / produkcja. każdy wymiar otrzymuje wymiar MDC. Każda sprawa dostaje znacznik.To takie proste.

Deweloperzy nie muszą podejmować żadnych decyzji tutaj. jedna osoba lub zespół powinien zdecydować, w czasie projektowania , jaki rodzaj krojenia, kostkowania i filtrowania musi być obsługiwany. Należy o tym wiedzieć, wyobrażając sobie, jakiego rodzaju zadań analitycznych można się spodziewać, aby wykonać.

Ta sama osoba lub zespół powinien zdecydować o konwencji nazewnictwa. to jest całkowicie dowolne. Wybierz coś, co jest estetyczne, autoopisowe (najważniejsze) i wystarczająco szczegółowe, aby nie było prawdopodobne, aby było sprzeczne z późniejszymi dodatkami. Myślniki vs. podkreślenie jest niezwykle nitpicky i niepokojąco obok punktu, ale zauważ, że może być mniej mylące dla pracowników ESL czytanie podkreśleń (przynajmniej w porównaniu do CamelCase); jednocześnie, podobno denerwuje to niektórych programistów z powodu niezręczności w dotarciu do wymaganych kluczy.

Jeśli chodzi o decydowanie o polityce, oznacza to po prostu określenie, w jakich przypadkach dany Marker lub wymiar MDC należy zastosować . Trzymaj to mocno (scentralizowane, celowe), ale pozwól na opinie od deweloperów, jeśli uważają, że zestaw wymiarów i znaczników jest niewystarczający dla zadanie pod ręką. Odpowiednio zmienić / dodać wymiary i / lub atrybuty.

Zrozum ta polityka będzie prawie koniecznie specyficzna dla projektu. Nie każdy projekt wymaga takiej samej analizy logowania. Wyobraź sobie koszmarne scenariusze. Następnie wyobraź sobie, jak chciałbyś być w stanie analizować dzienniki w tym scenariuszu. Prawdopodobnie nie chcesz pisać skomplikowanego skryptu, aby spróbować śledzić, która wiadomość należy do jakiego kontekstu i który stan jest który w którym czasie, prawda? Zakoduj wszelkie niezbędne informacje, takie jak wymiary i znaczniki, i zaoszczędź sobie kłopotów, jeśli coś pójdzie nie tak.

 86
Author: user359996,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-10 18:32:35

Po pierwsze, MDC.

MDC jest naprawdę przydatne w środowisku, w którym masz jeden "podmiot", który jest związany z pewnym zachowaniem. Typowy przykład: interakcja użytkownika z aplikacją internetową. Załóżmy, że wielu użytkowników bawi się Twoją aplikacją internetową. Korzystając z MDC, możesz łatwo je śledzić bez większych kłopotów. Przykład uproszczony:

...[Sandy][abcd] clicked on "change profile"
...[Joe][1234] clicked on "weather reports"
...[Joe][1234] clicked on "Europe"
...[Sandy][abcd] clicked on "logout"
...[Joe][1234] clicked on "logout"
...[Sandy][efgh] logged in

Tutaj używasz MDC w dwóch miejscach: dla nazwy użytkownika i dla identyfikatora sesji. W ten sposób możesz łatwo grep sesji jednego użytkownika, aby zobaczyć wszystko, co robili.

Po Drugie, markery.

Znaczniki są zwykle używane do" szczególnych " okoliczności, takich jak wysłanie wiadomości e-mail do Administratora w przypadku poważnych błędów. Nie wszystkie błędy zawsze należą do tej samej kategorii; niektóre muszą być rozpatrywane w odpowiedni sposób.

Lub, gdy użytkownik kończy pracę z usługą, zwykle przechodzi do dziennika informacyjnego, ale możesz również użyć znacznika dla takich wystąpień, jeśli chcesz, aby zdarzenia takie jak ten trafiały do oddzielnego pliku dziennika, dzięki temu można go łatwiej monitorować w celu statystycznego zbierania użytkowników.

Zasada kciuka:

  • MDC jest używany do kojarzenia wielu zdarzeń z kilkoma "encjami"
  • znaczniki są używane do" specjalnych " wydarzeń, które chcesz filtrować od zwykłych
 63
Author: darioo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-12 17:18:42

Znaczniki mogą być używane do koloru lub zaznaczania pojedynczej instrukcji . To, co zrobisz z tymi kolorami, czyli markerami, zależy wyłącznie od Ciebie. Jednak dwa wzorce wydają się być wspólne (pierwszy bardziej powszechny niż drugi) dla użycia markerów.

  1. Wyzwalanie: jakiś aplikator może zostać poinstruowany, aby podjął działanie w obecności określonego markera. Na przykład, SMTPAppender można skonfigurować do wysyłania wiadomości e-mail za każdym razem, gdy zdarzenie logowania jest oznaczone NOTIFY_ADMIN znacznik niezależnie od poziomu dziennika. Zobacz wyzwalanie oparte na znacznikach w dokumentacji logback. Można również łączyć poziomy dziennika i znaczniki do wyzwalania.

  2. Filtrowanie: możesz na przykład kolorować / oznaczać wszystkie dzienniki związane z trwałością (w różnych i wielu plikach klas) kolorem "DB". Następnie można filtrować dla "DB": wyłącz logowanie z wyjątkiem instrukcji log oznaczonych DB. Zobacz Rozdział o filtrach w dokumentacji logback dla więcej informacji (Szukaj MarkerFilter).

 26
Author: Ceki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-29 18:04:42

Podobnie jak dodatek, jeśli używasz logstash i masz włączone logowanie json, istnieje inne potencjalne użycie markera - do rejestrowania zmiennych, aby powiązać je z konkretnym Komunikatem dziennika. Jest to bardziej spójne i łatwiejsze do przetworzenia 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

 7
Author: Mark D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 11:23:45