Configurazione delle funzionalità di traccia
In questo argomento viene illustrato come attivare la funzionalità di traccia, configurare origini di traccia affinché vengano create tracce e impostati livelli di traccia, impostare traccia e propagazione di attività per supportare la correlazione tra tracce end-to-end e configurare i listener di traccia affinché accedano alle tracce.
Per consigli sulle impostazioni della funzionalità di traccia negli ambienti di produzione o debug, fare riferimento a Impostazioni consigliate per la traccia e la registrazione dei messaggi.
Attivazione delle tracce
Windows Communication Foundation (WCF) restituisce i dati seguenti per la traccia diagnostica:
- Tracce per le attività cardine dei processi in tutti i componenti delle applicazioni, ad esempio chiamate dell'operazione, eccezioni del codice, avvisi e altri eventi di elaborazione significativi.
- Eventi di errore di Windows quando la funzionalità di traccia non viene eseguita correttamente. Vedere Registrazione eventi.
La traccia di WCF viene generata sulla base di System.Diagnostics. Per utilizzare la funzionalità di traccia, è necessario definire le origini di traccia nel file di configurazione o nel codice. In WCF viene definita un'origine di traccia per ogni assembly WCF. System.ServiceModel è l'origine di traccia di WCF più generale e registra attività cardine di elaborazione nello stack di comunicazione di WCF, dall'immissione/abbandono del trasporto all'immissione/abbandono di codice utente. L'origine della traccia System.ServiceModel.MessageLogging registra tutti i messaggi che vengono propagati nel sistema.
Per impostazione predefinita, la traccia non è attivata. Per attivarla è necessario creare un listener di traccia e impostare un livello di traccia diverso da "Disattivo" per l'origine di traccia selezionata nella configurazione; in caso contrario WCF non genera tracce. Se non si specifica un listener, la traccia verrà disattivata automaticamente. Se viene definito un listener ma non è specificato alcun livello, per impostazione predefinita viene selezionato il livello "Disattivo", ovvero non viene generata alcuna traccia.
È possibile configurare la funzionalità di traccia utilizzando il file di configurazione dell'applicazione, Web.config per applicazioni di tipo host Web o Appname.exe.config per applicazioni indipendenti. Di seguito è riportato un esempio.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Nota
Per modificare il file di configurazione di un progetto del servizio WCF in Visual Studio, fare clic su di esso con il pulsante destro del mouse in Esplora soluzioni e scegliere l'elemento del menu di scelta rapida Modifica config WCF. Verrà avviato Configuration Editor Tool (SvcConfigEditor.exe) che consente di modificare le impostazioni di configurazione per i servizi WCF tramite un'interfaccia utente grafica.
Configurazione delle origini di traccia per la generazione di tracce
WCF definisce un'origine di traccia per ogni assembly. I listener definiti per tale origine accedono alle tracce generate all'interno di un assembly. Vengono definite le origini di traccia seguenti:
- System.ServiceModel: registra tutte le fasi dell'elaborazione WCF, ovvero le operazioni di lettura della configurazione, l'elaborazione di un messaggio nel trasporto, l'elaborazione della protezione, l'invio di un messaggio nel codice utente e così via.
- System.ServiceModel.MessageLogging: registra tutti i messaggi propagati nel sistema.
- System.IdentityModel.
- System.ServiceModel.Activation.
- System.IO.Log: registrazione per l'interfaccia .NET Framework nel Common Log File System (CLFS).
- System.Runtime.Serialization: registra quando gli oggetti vengono letti o scritti.
- CardSpace.
È possibile configurare ogni origine di traccia per l'utilizzo dello stesso listener (condiviso), come indicato nell'esempio di configurazione seguente.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
È inoltre possibile aggiungere origini di traccia definite dall'utente, come dimostrato nell'esempio seguente, in modo che vengano create tracce di codice utente.
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
Per ulteriori informazioni sulla creazione di origini di traccia definite dall'utente, vedere Extending Tracing.
Configurazione dei listener di traccia per l'utilizzo di tracce
In fase di esecuzione WCF fornisce dati di traccia ai listener che elaborano i dati. WCF fornisce vari listener predefiniti per System.Diagnostics, diversi a livello del formato utilizzato per l'output. È inoltre possibile aggiungere tipi di listener personalizzati.
È possibile utilizzare l'istruzione add per specificare il nome e il tipo del listener di traccia che si desidera utilizzare. Nella configurazione di esempio, il listener viene denominato traceListener
e viene aggiunto il listener di traccia standard di .NET Framework, ovvero System.Diagnostics.XmlWriterTraceListener, come tipo da utilizzare. Per ogni origine di traccia è possibile aggiungere il numero desiderato di listener. Se il listener di traccia genera la traccia in un file, nel file di configurazione è necessario specificare il percorso e il nome del file di output. A tal fine impostare initializeData sul nome del file per quel listener. Se non si specifica un nome file, viene generato un nome file a caso in base al tipo di listener utilizzato. Se viene utilizzato XmlWriterTraceListener, viene generato un nome file senza estensione. Se si implementa un listener personalizzato, è inoltre possibile utilizzare questo attributo per ricevere dati di inizializzazione diversi dal nome file. È ad esempio possibile specificare un identificatore di database per questo attributo.
È possibile configurare un listener di traccia personalizzato per l'invio di tracce in transito, ad esempio a un database remoto. I distributori di applicazioni devono applicare un apposito controllo di accesso nei log di traccia del computer remoto.
È inoltre possibile configurare un listener di traccia a livello di programmazione. Per ulteriori informazioni, vedere Procedura: creare e inizializzare listener di analisi e Creazione di un listener di analisi personalizzato (il contenuto potrebbe essere in inglese).
Attenzione: |
---|
Poiché System.Diagnostics.XmlWriterTraceListener non è thread-safe, è possibile che l'origine di traccia blocchi le risorse in modo esclusivo durante la restituzione di tracce. Quando molti thread restituiscono tracce a un'origine configurata per l'utilizzo di questo listener, può verificarsi un conflitto di risorse con conseguente calo delle prestazioni. Per risolvere il problema, è necessario implementare un listener personalizzato di tipo thread-safe.
|
Livello di traccia
Il livello di traccia viene controllato in base all'impostazione switchValue
dell'origine di traccia. Nella tabella seguente viene fornita una descrizione dei livelli di traccia disponibili.
Livello di traccia | Natura degli eventi registrati | Contenuto degli eventi registrati | Eventi registrati | Destinazione utente |
---|---|---|---|---|
Disattivo |
N/D |
N/D |
Non vengono generate tracce. |
N/D |
Critico |
Eventi "negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. |
Vengono registrate eccezioni non gestite comprese le seguenti:
|
Amministratori Sviluppatori di applicazioni |
|
Errore |
Eventi "negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. |
Si è verificata un'elaborazione imprevista. L'applicazione non è stata in grado di eseguire un'attività come previsto. L'applicazione, tuttavia, è ancora in esecuzione. |
Vengono registrate tutte le eccezioni. |
Administrators Sviluppatori di applicazioni |
Avviso |
Eventi "negativi": eventi che indicano un'elaborazione imprevista o una condizione di errore. |
Un possibile problema si è verificato o potrebbe verificarsi, ma l'applicazione funziona ancora correttamente. Tuttavia, potrebbe smettere di farlo. |
|
Administrators Sviluppatori di applicazioni |
Informazioni |
Eventi "positivi": eventi che contrassegnano attività cardine eseguite correttamente. |
Attività cardine importanti e corrette di esecuzione dell'applicazione, indipendentemente dal funzionamento corretto o non corretto dell'applicazione. |
In generale il sistema genera messaggi informativi utili per il monitoraggio e la diagnosi dello stato di sistema, la valutazione delle prestazioni o il profiling. È possibile utilizzare queste informazioni per la pianificazione della capacità e la gestione delle prestazioni:
|
Administrators Sviluppatori di applicazioni Sviluppatori di prodotti |
Dettagliato |
Eventi "positivi": eventi che contrassegnano attività cardine eseguite correttamente. |
Vengono generati eventi di basso livello per codice utente e manutenzione. |
In genere è possibile utilizzare questo livello per il debug o l'ottimizzazione dell'applicazione.
|
Administrators Sviluppatori di applicazioni Sviluppatori di prodotti |
ActivityTracing |
Eventi di flusso tra attività di elaborazione e componenti. |
Questo livello consente ad amministratori e sviluppatori di mettere in correlazione applicazioni nello stesso dominio applicazione:
|
Tutto |
|
Tutto |
L'applicazione può funzionare correttamente. Vengono generati tutti gli eventi. |
Tutti gli eventi precedenti. |
Tutto |
I livelli da Dettagliato a Critico sono inclusi l'uno dentro l'altro, ovvero ogni livello di traccia comprende tutti i livelli che lo precedono ad eccezione del livello Disattivo. Un listener in ascolto al livello Avviso, ad esempio, riceve le tracce Critico, Errore e Avviso. Il livello Tutto comprende gli eventi da Dettagliato a Critico ed eventi di Traccia attività.
Attenzione: |
---|
I livelli Informazioni, Dettagliato e ActivityTracing generano molte tracce che possono influire negativamente sulla velocità effettiva dei messaggi se tutte le risorse disponibili nel computer sono esaurite. |
Configurazione della traccia e della propagazione di attività a fini di correlazione
Il valore activityTracing specificato per l'attributo switchValue consente di attivare la traccia di attività, che genera tracce per limiti e trasferimenti di attività all'interno di endpoint.
Nota
Quando si utilizzano determinate funzioni di estensibilità in WCF, potrebbe venire generata la classe NullReferenceException se la traccia attività è attiva. Per risolvere questo problema, controllare il file di configurazione dell'applicazione e verificare che l'attributo switchValue per l'origine di traccia non sia impostato su activityTracing.
L'attributo propagateActivity indica se l'attività deve essere propagata ad altri endpoint che partecipano nello scambio di messaggi. Impostando questo valore su true, è possibile osservare file di traccia generati da due endpoint qualsiasi e notare come un insieme di tracce in un endpoint venga propagato a un insieme di tracce in un altro endpoint.
Per ulteriori informazioni su traccia e propagazione di attività, vedere Traccia e propagazione di attività per la correlazione tra tracce end-to-end.
Entrambi i valore booleani propagateActivity
e ActivityTracing
si applicano a System.ServiceModel TraceSource. Il valore
ActivityTracing
si applica inoltre a qualsiasi origine di traccia, comprese le origini di WCF o definite dall'utente.
Non è possibile utilizzare l'attributo propagateActivity con le origini di traccia definite dall'utente. Per la propagazione di ID attività di codice utente, accertarsi di non impostare l'attributo ActivityTracing di ServiceModel, mantenendo l'attributo propagateActivity di ServiceModel impostato su true.
Vedere anche
Concetti
Altre risorse
Traccia
Procedura: creare e inizializzare listener di analisi
Creazione di un listener di analisi personalizzato