Condividi tramite


Registrazione e tracciamento di .NET

Il codice può essere instrumentato per produrre un log, che funge da record di eventi interessanti che si sono verificati durante l'esecuzione del programma. Per comprendere il comportamento dell'applicazione, è possibile esaminare i log. .NET ha accumulato diverse API di log nel corso della sua storia e questo articolo ti aiuterà a comprendere quali sono le opzioni disponibili.

Nota

A volte, il logging viene definito anche "tracciamento", incluse in alcune API meno recenti di Windows e .NET. Negli ultimi anni, la "traccia" è più comunemente usata come abbreviazione per la traccia distribuita, ma questo non è il significato descritto in questo articolo.

API di registrazione .NET

ILogger

Per la maggior parte dei casi, se si aggiunge la registrazione a un progetto esistente o si crea un nuovo progetto, l'infrastruttura ILogger è una scelta predefinita ottimale. ILogger Supporta la registrazione strutturata veloce, la configurazione flessibile e una raccolta di sink comuni, inclusa la console, che è ciò che viene visualizzato durante l'esecuzione di un'app ASP.NET. Inoltre, l'interfaccia ILogger può fungere anche da facciata su molte implementazioni di registrazione di terze parti che offrono funzionalità avanzate ed estendibilità.

ILogger fornisce la funzionalità di logging per l'implementazione di OpenTelemetry per .NET, che consente l'esportazione dei log dalla tua applicazione verso un'ampia gamma di sistemi APM per un'analisi più approfondita.

Eventsource

EventSource è un'API meno recente e ad alte prestazioni con registrazione strutturata. Originariamente è stata progettata per integrarsi bene con Event Tracing for Windows (ETW), ma è stata successivamente estesa per supportare la traccia multipiattaforma EventPipe e EventListener per sink personalizzati. In confronto a ILogger, EventSource ha relativamente pochi sink di registrazione predefiniti, e non c'è un supporto integrato per la configurazione tramite file di configurazione separati. EventSource è eccellente se si vuole un maggiore controllo sull'integrazione ETW o EventPipe, ma per la registrazione per utilizzo generico, ILogger è più flessibile e più facile da usare.

Traccia

System.Diagnostics.Trace e System.Diagnostics.Debug sono le API di registrazione più antiche di .NET. Queste classi dispongono di API di configurazione flessibili e di un ampio ecosistema di sink, ma supportano solo la registrazione non strutturata. In .NET Framework, possono essere configurati tramite un file app.config, ma in .NET Core non esiste un meccanismo di configurazione integrato basato su file. Vengono in genere usati per produrre output di diagnostica per lo sviluppatore durante l'esecuzione nel debugger. Il team .NET continua a supportare queste API per scopi di compatibilità con le versioni precedenti, ma non verrà aggiunta alcuna nuova funzionalità. Queste API sono una scelta ottimale per le applicazioni che le usano già. Per le app più recenti che non sono già integrate con un'API di registrazione, ILogger può offrire funzioni migliori.

API di registrazione specializzate

Console

La classe System.Console include i metodi Write e WriteLine che possono essere usati in scenari di registrazione semplici. Queste API sono molto facili da iniziare a usare, ma la soluzione non sarà flessibile come un'API di registrazione per utilizzo generico. La console consente solo la registrazione non strutturata e non è disponibile alcun supporto di configurazione per selezionare i messaggi di log abilitati o per il reindirizzamento a un sink diverso. L'uso delle API ILogger o Trace con output su console non richiede grande sforzo e mantiene la configurazione della registrazione.

DiagnosticSource

System.Diagnostics.DiagnosticSource è destinato alla registrazione in cui i messaggi di log verranno analizzati in modo sincrono in-process anziché serializzati in qualsiasi risorsa di archiviazione. Ciò consente all'origine e al listener di scambiare oggetti .NET arbitrari come messaggi, mentre la maggior parte delle API di registrazione richiede che l'evento di log sia serializzabile. Questa tecnica può anche essere estremamente veloce, gestendo gli eventi di log in decine di nanosecondi se il listener viene implementato in modo efficiente. Gli strumenti che usano queste API spesso agiscono più come profiler in-process, anche se qui l'API non impone alcun vincolo.

EventLog

System.Diagnostics.EventLog è un'API di Windows che scrive i messaggi nel Registro eventi di Windows. In molti casi, l'uso di ILogger con un sink EventLog facoltativo durante l'esecuzione in Windows può offrire funzionalità simili senza associare strettamente l'app al sistema operativo Windows.

Terminologia di registrazione

Registrazione strutturata e non strutturata

La registrazione può essere strutturata o non strutturata:

  • Non strutturato: le voci di log vengono codificate come testo in formato libero che gli esseri umani possono leggere, ma è difficile analizzare ed eseguire query a livello di codice.
  • Strutturate: le voci di log hanno uno schema ben definito e possono essere codificate in formati binari e testuali diversi. Questi log sono progettati per essere traducibili dal computer ed eseguire query in modo che sia gli esseri umani che i sistemi automatizzati possano usarli facilmente.

Le API di registrazione strutturate valide possono offrire maggiore funzionalità e prestazioni con un piccolo aumento della complessità dell'utilizzo.

Sink

La maggior parte delle API di registrazione consente l'invio dei messaggi di log a destinazioni diverse denominate sink. Alcune API hanno un numero elevato di sink pre-creati, mentre altre ne hanno solo alcuni. Se non esiste alcun sink predefinito, in genere esiste un'API di estendibilità che consente di creare un sink personalizzato, anche se ciò richiede la scrittura di un po' più di codice.