Rejestrowanie i śledzenie platformy .NET
Kod może być instrumentowany w celu utworzenia dziennika, który służy jako rekord interesujących zdarzeń, które wystąpiły podczas uruchamiania programu. Aby zrozumieć zachowanie aplikacji, można przejrzeć dzienniki. Platforma .NET zgromadziła kilka różnych interfejsów API rejestrowania w swojej historii, a ten artykuł pomoże Ci zrozumieć, jakie opcje są dostępne.
Uwaga
Czasami rejestrowanie jest również nazywane "śledzeniem", w tym w niektórych starszych interfejsach API systemu Windows i platformy .NET. W ostatnich latach "śledzenie" jest częściej używane jako skrót do śledzenia rozproszonego, ale nie jest to znaczenie w tym artykule.
Interfejsy API rejestrowania platformy .NET
ILogger
W większości przypadków dodanie rejestrowania do istniejącego projektu lub utworzenie nowego projektu jest dobrym wyborem domyślnym. ILogger
Obsługuje szybkie rejestrowanie strukturalne, elastyczną konfigurację i kolekcję typowych ujściów , w tym konsolę, która jest widoczna podczas uruchamiania aplikacji ASP.NET. ILogger
Ponadto interfejs może również służyć jako fasada w wielu implementacjach rejestrowania innych firm, które oferują zaawansowane funkcje i rozszerzalność.
Usługa ILogger udostępnia historię rejestrowania implementacji biblioteki OpenTelemetry dla platformy .NET, która umożliwia wychodzące dzienniki z aplikacji do różnych systemów APM w celu dalszej analizy.
EventSource
EventSource to starszy, wydajny interfejs API ze strukturą rejestrowania. Pierwotnie została zaprojektowana tak, aby dobrze integrowała się z funkcją Śledzenie zdarzeń dla systemu Windows (ETW), ale została później rozszerzona o obsługę śledzenia międzyplatformowego eventPipe i EventListener niestandardowych ujść. W porównaniu z ILogger
programem EventSource
ma stosunkowo niewiele wstępnie wykonanych ujść rejestrowania i nie ma wbudowanej obsługi konfigurowania za pośrednictwem oddzielnych plików konfiguracji. EventSource
jest doskonały, jeśli chcesz ściślejsza kontrola nad integracją ETW lub EventPipe , ale w przypadku rejestrowania ogólnego przeznaczenia jest ILogger
bardziej elastyczna i łatwiejsza w użyciu.
Śledzenie
System.Diagnostics.Trace i System.Diagnostics.Debug to . Najstarsze interfejsy API rejestrowania platformy NET. Te klasy mają elastyczne interfejsy API konfiguracji i duży ekosystem ujścia, ale obsługują tylko rejestrowanie bez struktury. W programie .NET Framework można je skonfigurować za pośrednictwem pliku app.config, ale na platformie .NET Core nie ma wbudowanego mechanizmu konfiguracji opartego na plikach. Są one zwykle używane do tworzenia danych wyjściowych diagnostycznych dla dewelopera podczas działania w debugerze. Zespół platformy .NET nadal obsługuje te interfejsy API na potrzeby zgodności z poprzednimi wersjami, ale nie zostaną dodane żadne nowe funkcje. Te interfejsy API są dobrym wyborem dla aplikacji, które już ich używają. W przypadku nowszych aplikacji, które nie zostały jeszcze zatwierdzone do interfejsu API rejestrowania, ILogger
mogą oferować lepszą funkcjonalność.
Wyspecjalizowane interfejsy API rejestrowania
Konsola
Klasa System.Console ma Write metody i WriteLine , które mogą być używane w prostych scenariuszach rejestrowania. Te interfejsy API są bardzo łatwe do rozpoczęcia pracy, ale rozwiązanie nie będzie tak elastyczne, jak interfejs API rejestrowania ogólnego przeznaczenia. Konsola zezwala tylko na rejestrowanie bez struktury i nie ma obsługi konfiguracji, aby wybrać, które komunikaty dzienników są włączone lub do ponownego pobierania do innego ujścia. Korzystanie z interfejsów API ILogger lub Trace z ujściem konsoli nie wymaga większego nakładu pracy i zapewnia możliwość konfigurowania rejestrowania.
DiagnosticSource
System.Diagnostics.DiagnosticSource jest przeznaczony do rejestrowania, w którym komunikaty dziennika będą analizowane synchronicznie w procesie, a nie serializowane do dowolnego magazynu. Dzięki temu źródło i odbiornik mogą wymieniać dowolne obiekty platformy .NET jako komunikaty, natomiast większość interfejsów API rejestrowania wymaga serializacji zdarzenia dziennika. Ta technika może być również bardzo szybka, obsługa zdarzeń dziennika w dziesiątkach nanosekund, jeśli odbiornik jest implementowany wydajnie. Narzędzia korzystające z tych interfejsów API często działają bardziej jak profilerzy procesów, chociaż interfejs API nie nakłada żadnych ograniczeń w tym miejscu.
EventLog
System.Diagnostics.EventLog to tylko interfejs API systemu Windows, który zapisuje komunikaty w dzienniku zdarzeń systemu Windows. W wielu przypadkach używanie protokołu ILogger z opcjonalnym ujściem dziennika zdarzeń podczas uruchamiania w systemie Windows może zapewnić podobną funkcjonalność bez ścisłego sprzężenia aplikacji z systemem operacyjnym Windows.
Terminologia dotycząca rejestrowania
Rejestrowanie ustrukturyzowane i nieustrukturyzowane
Rejestrowanie może być ustrukturyzowane lub nieustrukturyzowane:
- Nieustrukturyzowane: wpisy dziennika są kodowane jako dowolny tekst, który ludzie mogą odczytać, ale trudno jest programowo analizować i wykonywać zapytania.
- Ustrukturyzowane: Wpisy dziennika mają dobrze zdefiniowany schemat i mogą być kodowane w różnych formatach binarnych i tekstowych. Te dzienniki są przeznaczone do translacji maszyn i wykonywania zapytań, dzięki czemu zarówno ludzie, jak i zautomatyzowane systemy mogą z nimi łatwo współpracować.
Dobre interfejsy API rejestrowania ze strukturą mogą oferować większą funkcjonalność i wydajność tylko przy niewielkim wzroście złożoności użycia.
Umywalki
Większość interfejsów API rejestrowania umożliwia wysyłanie komunikatów dziennika do różnych miejsc docelowych nazywanych ujściami. Niektóre interfejsy API mają dużą liczbę wstępnie wykonanych zlewów, podczas gdy inne mają tylko kilka. Jeśli nie istnieje wstępnie utworzony ujście, zwykle istnieje interfejs API rozszerzalności, który umożliwi tworzenie niestandardowego ujścia, chociaż wymaga to nieco więcej kodu.