Istnieją dwa podstawowe postępy w podejściu strukturalnym , których nie można emulować za pomocą dzienników tekstowych bez (czasem ekstremalnych) dodatkowego wysiłku.
Rodzaje zdarzeń
Kiedy piszesz dwa zdarzenia z log4net, takie jak:
log.Debug("Disk quota {0} exceeded by user {1}", 100, "DTI-Matt");
log.Debug("Disk quota {0} exceeded by user {1}", 150, "nblumhardt");
Spowoduje to wytworzenie podobnego tekstu:
Disk quota 100 exceeded by user DTI-Matt
Disk quota 150 exceeded by user nblumhardt
Ale jeśli chodzi o przetwarzanie maszynowe, to tylko dwa wiersze innego tekstu.
Możesz znaleźć wszystkie zdarzenia „Przekroczone miejsce na dysku”, ale uproszczony przypadek wyszukiwania zdarzeń like 'Disk quota%'
spadnie, gdy tylko pojawi się inne zdarzenie wyglądające jak:
Disk quota 100 set for user DTI-Matt
Rejestrowanie tekstu odrzuca informacje, które początkowo posiadamy na temat źródła zdarzenia, i należy to zrekonstruować, czytając logi zwykle za pomocą coraz bardziej rozbudowanych wyrażeń dopasowania.
Natomiast podczas pisania następujących dwóch zdarzeń Serilog :
log.Debug("Disk quota {Quota} exceeded by user {Username}", 100, "DTI-Matt");
log.Debug("Disk quota {Quota} exceeded by user {Username}", 150, "nblumhardt");
Wywołują one tekst wyjściowy podobny do wersji log4net, ale za kulisami "Disk quota {Quota} exceeded by user {Username}"
szablon wiadomości jest przenoszony przez oba zdarzenia.
Z odpowiednim ujściem możesz później pisać zapytania where MessageTemplate = 'Disk quota {Quota} exceeded by user {Username}'
i uzyskiwać dokładnie zdarzenia, w których limit miejsca został przekroczony.
Nie zawsze wygodne jest przechowywanie całego szablonu wiadomości przy każdym zdarzeniu dziennika, więc niektóre zatapiają szablon wiadomości w EventType
wartości liczbowej (np. 0x1234abcd
), Lub możesz dodać wzbogacenie do potoku rejestrowania, aby zrobić to sam .
Jest bardziej subtelny niż kolejna różnica poniżej, ale jest niezwykle potężny w przypadku dużych objętości kłód.
Dane strukturalne
Ponownie, biorąc pod uwagę dwa zdarzenia dotyczące wykorzystania miejsca na dysku, może być dość łatwe przy użyciu dzienników tekstowych, aby zapytać o konkretnego użytkownika like 'Disk quota' and like 'DTI-Matt'
.
Jednak diagnostyka produkcji nie zawsze jest tak prosta. Wyobraź sobie, że konieczne jest znalezienie zdarzeń, w których przekroczony limit miejsca był mniejszy niż 125 MB?
Z Serilog jest to możliwe w większości zlewów przy użyciu wariantu:
Quota < 125
Konstruowanie tego rodzaju zapytań z wyrażenia regularnego jest możliwe, ale szybko się męczy i zwykle jest miarą ostateczności.
Teraz dodaj do tego typ zdarzenia:
Quota < 125 and EventType = 0x1234abcd
Zaczynasz widzieć, jak te możliwości łączą się w prosty sposób, dzięki czemu debugowanie produkcyjne za pomocą dzienników wydaje się być działaniem programistycznym najwyższej klasy.
Kolejną zaletą, być może nie tak łatwą do uniknięcia z góry, ale po usunięciu debugowania produkcyjnego z krainy hakowania wyrażeń regularnych, programiści zaczynają bardziej doceniać dzienniki i bardziej uważnie pisząc je. Lepsze logi -> aplikacje lepszej jakości -> więcej szczęścia dookoła.