Protokolování a trasování rozhraní .NET
Kód lze instrumentovat k vytvoření protokolu, který slouží jako záznam zajímavých událostí, ke kterým došlo při spuštění programu. Pokud chcete porozumět chování aplikace, můžete si projít protokoly. Rozhraní .NET v historii nashromáždilo několik různých rozhraní API protokolování a tento článek vám pomůže pochopit, jaké možnosti jsou k dispozici.
Poznámka:
Někdy se protokolování označuje také jako trasování, včetně některých starších rozhraní WINDOWS a rozhraní .NET API. V posledních letech se "trasování" častěji používá jako zkratka distribuovaného trasování, ale to není význam v tomto článku.
Rozhraní API pro protokolování .NET
ILogger
Ve většiněpřípadůch ILogger
podporuje rychlé strukturované protokolování, flexibilní konfiguraci a kolekci běžných jímek, včetně konzoly , což je to, co vidíte při spuštění aplikace ASP.NET. ILogger
Rozhraní také může sloužit jako fasáda nad mnoha implementacemi protokolování třetích stran, které nabízejí bohaté funkce a rozšiřitelnost.
ILogger poskytuje protokolovací scénář pro implementaci OpenTelemetry pro .NET, což umožňuje odchozí přenos protokolů z vaší aplikace do různých systémů APM pro další analýzu.
EventSource
EventSource je starší vysoce výkonné rozhraní API se strukturovaným protokolováním. Původně byla navržena tak, aby se dobře integrovala s trasováním událostí pro Windows (ETW), ale později byla rozšířena tak, aby podporovala trasování událostí EventPipe pro různé platformy a EventListener pro vlastní jímky. Oproti ILogger
tomu EventSource
má relativně málo předdefinovaných jímek protokolování a neexistuje žádná integrovaná podpora konfigurace prostřednictvím samostatných konfiguračních souborů. EventSource
je vynikající, pokud chcete mít větší kontrolu nad integrací EtW nebo EventPipe , ale pro protokolování pro obecné účely je ILogger
flexibilnější a jednodušší.
Trasování
System.Diagnostics.Trace a System.Diagnostics.Debug jsou . Rozhraní API pro nejstarší protokolování rozhraní NET. Tyto třídy mají flexibilní rozhraní API konfigurace a velký ekosystém jímek, ale podporují pouze nestrukturované protokolování. V rozhraní .NET Framework je možné je nakonfigurovat prostřednictvím souboru app.config, ale v .NET Core neexistuje žádný integrovaný konfigurační mechanismus založený na souborech. Obvykle se používají k vytvoření výstupu diagnostiky pro vývojáře při spuštění v ladicím programu. Tým .NET nadále podporuje tato rozhraní API pro účely zpětné kompatibility, ale nebudou přidány žádné nové funkce. Tato rozhraní API jsou skvělou volbou pro aplikace, které je už používají. V případě novějších aplikací, které ještě nejsou potvrzené do rozhraní API protokolování, ILogger
můžou nabízet lepší funkce.
Specializovaná rozhraní API protokolování
Konzola
Třída System.Console má metody Write a WriteLine metody, které lze použít v jednoduchých scénářích protokolování. Tato rozhraní API jsou velmi snadná, ale řešení nebude tak flexibilní jako rozhraní API pro protokolování pro obecné účely. Konzola umožňuje pouze nestrukturované protokolování a není k dispozici žádná podpora konfigurace pro výběr povolených zpráv protokolu nebo změna cílení na jinou jímku. Použití rozhraní ILogger nebo Trace API s jímkou konzoly nezabírají příliš mnoho úsilí a protokolování je možné konfigurovat.
DiagnosticSource
System.Diagnostics.DiagnosticSource je určen pro protokolování, kde se zprávy protokolu budou analyzovat synchronně v procesu, nikoli serializovány do jakéhokoli úložiště. To umožňuje zdrojovému a naslouchacímu procesu výměnu libovolných objektů .NET jako zpráv, zatímco většina rozhraní API protokolování vyžaduje serializovatelnou událost protokolu. Tato technika může být také extrémně rychlá, zpracování událostí protokolu v desítkách nanosekund, pokud je naslouchací proces implementovaný efektivně. Nástroje, které tato rozhraní API používají, často fungují spíše jako profilátory v procesu, i když toto rozhraní API neukládá žádné omezení.
EventLog
System.Diagnostics.EventLog je rozhraní API pouze pro Windows, které zapisuje zprávy do protokolu událostí systému Windows. V mnoha případech může použití ILoggeru s volitelnou jímkou EventLog při spuštění ve Windows poskytovat podobné funkce bez těsného propojení aplikace s operačním systémem Windows.
Terminologie protokolování
Strukturované a nestrukturované protokolování
Protokolování může být strukturované nebo nestrukturované:
- Nestrukturovaná: Položky protokolu jsou kódovány jako volný text, který lidé mohou číst, ale je obtížné programově parsovat a dotazovat.
- Strukturovaná: Položky protokolu mají dobře definované schéma a lze je zakódovat v různých binárních a textových formátech. Tyto protokoly jsou navržené tak, aby byly strojově přeložitelné a dotazovatelné, aby s nimi lidé i automatizované systémy mohli snadno pracovat.
Dobrá rozhraní API strukturovaného protokolování můžou nabízet více funkcí a výkonu pouze s malým nárůstem složitosti použití.
Potápí
Většina rozhraní API protokolování umožňuje odesílání zpráv protokolu do různých cílů označovaných jako jímky. Některá rozhraní API mají velký počet předpřipravených jímek, zatímco jiná mají jen několik. Pokud neexistuje žádná předem vytvořená jímka, obvykle existuje rozhraní API rozšiřitelnosti, které vám umožní vytvořit vlastní jímku, i když to vyžaduje psaní trochu více kódu.