2013-07-10 10 views
5

Ho lavorato sull'utilizzo di .NET4.5 new feature ETW (EventSource). Ho problemi a visualizzarlo negli elenchi dei provider di traccia utilizzando perfmon-> Data Collector Set. Sono stato in grado di vedere i registri usando perfview. Sono stato in grado di generare manifest dalla classe EventSource utilizzando il suo metodo statico GenerateManifest. Ciò fornirà il manifest di myevents nella classe EventSource ma non conterrà dettagli sui canali..Net 4.5 Provider ETW EventSource non visualizzati nell'elenco dei provider

La mia domanda è come aggiungere informazioni specifiche del canale dopo aver generato il file manifest per la sessione di tracciamento perfmon? Mi piacerebbe anche usare la sessione di Perfmon's Tracing per abilitare il provider al posto di perfview.

Qualsiasi input è molto apprezzato.

+0

hai funzionato? Sono nella stessa situazione e un po 'perso! – Pedro

risposta

8

MS rilasciato un pacchetto Nuget che registra la classe EventSource dopo la generazione:

http://blogs.msdn.com/b/dotnet/archive/2013/08/09/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx

Registrazione del EventSource

Quando si installa il pacchetto EventSource NuGet, il passaggio di generazione accennato in precedenza genera i seguenti file per ogni EventSource nell'applicazione:

<AssemblyName>.<EventSourceTypeName>.etwManifest.man 
<AssemblyName>.<EventSourceTypeName>.etwManifest.dll. 

Questi file devono essere registrati con il sistema operativo per consentire canale supporto. Per fare questo si esegue il seguente comando dopo i file sono nella loro posizione finale schierato:

wevtutil.exe im <EtwManifestManFile> /rf:"<EtwManifestDllFile>" /mf:"<EtwManifestDllFile>" 

Una volta che questo comando viene eseguito registrazione, tutte le chiamate successive a MinimalEventSource.Log.Load(), da qualsiasi processo su quella macchina, corrisponderà automaticamente agli eventi nel registro eventi di Windows.

Dopo averlo registrato dovresti vederlo in tutti gli strumenti che leggono i provider installati.

+0

riavviare il visualizzatore eventi dopo la registrazione. –

+0

Riesco a vedere il mio interno di Perfmon, ma non il Visualizzatore eventi -> Crea visualizzazione personalizzata, anche dopo aver riavviato il Visualizzatore eventi più volte. – HashTagDevDude

0

L'implementazione EventSource impedisce di specificare il canale anche se si modifica il manifest. Quando si scrive un evento su ETW si passa un blocco descrittore in cui è specificato l'id del canale. Sfortunatamente EventSource non offre un modo per impostarlo tramite un attributo o altro e lo imposta sempre a zero, il che significa che non viene usato alcun canale.

EventSource si comporta in modo leggermente diverso da un normale provider ETW in quanto non espone il suo manifest attraverso una risorsa win32, ma piuttosto invia un evento ETW "noto" con manifest come payload. Questo è il motivo per cui perfmon è l'unico strumento abilitato ETW che riconosce * gli eventi inviati da .NET 4.5 EventSource.

* È sempre possibile ricevere eventi utilizzando perfmon o altri strumenti simili ma non saranno in grado di decodificare il carico utile, ad es. parametri passati a WriteEvent.

EDIT: See answer to a similar question

Acclamazioni Lars

+0

Ciao Lars, C'è un modo che ho trovato dopo un po 'di ricerca e lettura per registrare gli eventi nel registro eventi e visualizzarli nel visualizzatore eventi insieme alla decodifica del payload ... vedi il mio documento sopra ... –

Problemi correlati