Condividi tramite


Registrazione e traccia 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 registrazione nella cronologia e questo articolo consente di comprendere quali opzioni sono disponibili.

Nota

A volte, la registrazione viene definita anche "traccia", inclusa in alcune delle API di Windows e .NET meno recenti. 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 il brano di registrazione per l'implementazione di OpenTelemetry per .NET, che consente l'uscita dei log dall'applicazione a un'ampia gamma di sistemi APM per un'ulteriore analisi.

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 .API di registrazione meno recenti 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 hanno già eseguito il commit in un'API di registrazione, ILogger possono offrire funzionalità 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 un sink della console non richiede molto lavoro aggiuntivo e mantiene la registrazione configurabile.

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 altri 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.