Delen via


.NET-logboekregistratie en tracering

Code kan worden geïnstrueerd om een logboek te produceren, dat fungeert als een record van interessante gebeurtenissen die plaatsvonden tijdens het uitvoeren van het programma. Logboeken kunnen worden gecontroleerd om inzicht te hebben in het gedrag van de toepassing. .NET heeft verschillende api's voor logboekregistratie verzameld in de geschiedenis. In dit artikel krijgt u inzicht in de beschikbare opties.

Notitie

Soms wordt logboekregistratie ook wel tracering genoemd, waaronder in sommige oudere Windows- en .NET-API's. In de afgelopen jaren wordt tracering vaker gebruikt als afkorting voor gedistribueerde tracering, maar dat is niet de betekenis in dit artikel.

.NET-logboekregistratie-API's

ILogger

In de meeste gevallen is de ILogger-infrastructuur een goede standaardoptie, ongeacht of u logboekregistratie toevoegt aan een bestaand project of een nieuw project maakt. ILogger biedt ondersteuning voor snelle gestructureerde logboekregistratie, flexibele configuratie en een verzameling algemene sinks , waaronder de console, wat u ziet wanneer u een ASP.NET-app uitvoert. Daarnaast kan de ILogger interface ook fungeren als een gevel over veel implementaties van logboekregistratie van derden die uitgebreide functionaliteit en uitbreidbaarheid bieden.

ILogger biedt het logboekregistratieverhaal voor de OpenTelemetry-implementatie voor .NET, waarmee uitgaande logboeken van uw toepassing naar verschillende APM-systemen kunnen worden uitgevoerd voor verdere analyse.

EventSource

EventSource is een oudere, krachtige API met gestructureerde logboekregistratie. Het is oorspronkelijk ontworpen om goed te integreren met Event Tracing voor Windows (ETW), maar werd later uitgebreid ter ondersteuning van EventPipe cross-platform tracing en EventListener voor aangepaste sinks. In vergelijking met ILogger, EventSource heeft relatief weinig vooraf gemaakte sinks voor logboekregistratie en er is geen ingebouwde ondersteuning voor het configureren via afzonderlijke configuratiebestanden. EventSource is uitstekend als u meer controle wilt over ETW - of EventPipe-integratie , maar voor logboekregistratie ILogger voor algemeen gebruik flexibeler en eenvoudiger te gebruiken is.

Trace

System.Diagnostics.Trace en System.Diagnostics.Debug zijn . De oudste logboekregistratie-API's van NET. Deze klassen hebben flexibele configuratie-API's en een groot ecosysteem van sinks, maar bieden alleen ondersteuning voor ongestructureerde logboekregistratie. In .NET Framework kunnen ze worden geconfigureerd via een app.config-bestand, maar in .NET Core is er geen ingebouwd configuratiemechanisme op basis van bestanden. Ze worden meestal gebruikt voor het produceren van diagnostische uitvoer voor de ontwikkelaar tijdens uitvoering onder het foutopsporingsprogramma. Het .NET-team blijft deze API's ondersteunen voor achterwaartse compatibiliteit, maar er wordt geen nieuwe functionaliteit toegevoegd. Deze API's zijn een prima keuze voor toepassingen die deze al gebruiken. Voor nieuwere apps die nog niet zijn doorgevoerd in een logboekregistratie-API, ILogger biedt dit mogelijk betere functionaliteit.

Gespecialiseerde API's voor logboekregistratie

Console

De System.Console klasse heeft de Write en WriteLine methoden die kunnen worden gebruikt in eenvoudige logboekregistratiescenario's. Deze API's zijn zeer eenvoudig om aan de slag te gaan, maar de oplossing is niet zo flexibel als een API voor logboekregistratie voor algemeen gebruik. Console staat alleen ongestructureerde logboekregistratie toe en er is geen configuratieondersteuning om te selecteren welke logboekberichten zijn ingeschakeld of om opnieuw te bepalen naar een andere sink. Het gebruik van de ILogger- of Trace-API's met een console-sink kost niet veel extra moeite en houdt de logboekregistratie configureerbaar.

DiagnosticSource

System.Diagnostics.DiagnosticSource is bedoeld voor logboekregistratie waarbij de logboekberichten synchroon worden geanalyseerd in het proces in plaats van geserialiseerd te worden naar elke opslag. Hierdoor kunnen de bron en listener willekeurige .NET-objecten uitwisselen als berichten, terwijl de meeste logboek-API's vereisen dat de logboekgebeurtenis serialiseerbaar is. Deze techniek kan ook zeer snel zijn, het verwerken van logboekevenementen in tientallen nanoseconden als de listener efficiënt wordt geïmplementeerd. Hulpprogramma's die gebruikmaken van deze API's fungeren vaak meer als in-process profilers, maar de API legt hier geen beperkingen op.

EventLog

System.Diagnostics.EventLog is een windows-API die berichten naar het Windows-gebeurtenislogboek schrijft. In veel gevallen kan het gebruik van ILogger met een optionele EventLog-sink bij het uitvoeren op Windows vergelijkbare functionaliteit bieden zonder de app nauw aan het Windows-besturingssysteem te koppelen.

Terminologie voor logboekregistratie

Gestructureerde en ongestructureerde logboekregistratie

Logboekregistratie kan gestructureerd of ongestructureerd zijn:

  • Ongestructureerd: logboekvermeldingen worden gecodeerd als vrije tekst die mensen kunnen lezen, maar het is moeilijk programmatisch te parseren en query's uit te voeren.
  • Gestructureerd: logboekvermeldingen hebben een goed gedefinieerd schema en kunnen worden gecodeerd in verschillende binaire en tekstuele indelingen. Deze logboeken zijn ontworpen om machinevertalers en query's uit te voeren, zodat zowel mensen als geautomatiseerde systemen er eenvoudig mee kunnen werken.

Goede API's voor gestructureerde logboekregistratie kunnen meer functionaliteit en prestaties bieden met slechts een kleine toename van de gebruikscomplexiteit.

Putten

Met de meeste api's voor logboekregistratie kunnen logboekberichten worden verzonden naar verschillende bestemmingen, sinks genoemd. Sommige API's hebben een groot aantal vooraf gemaakte sinks, terwijl andere slechts enkele hebben. Als er geen vooraf gemaakte sink bestaat, is er meestal een uitbreidbaarheids-API waarmee u een aangepaste sink kunt maken, hoewel hiervoor iets meer code moet worden geschreven.