2013-07-10 9 views
5

Ich habe gearbeitet mit .NET4.5 neue Feature ETW (EventSource). Ich habe Probleme, sie in den Trace-Provider-Listen mit Hilfe von perfmon-> Data Collector Sets anzuzeigen. Ich konnte die Protokolle mit perfview sehen. Ich konnte Manifest von EventSource-Klasse mithilfe seiner statischen Methode GenerateManifest generieren. Dadurch wird das Manifest von myevents in der EventSource-Klasse bereitgestellt, enthält jedoch keine Details zu den Channels..Net 4.5 EventSource ETW Provider nicht in der Anbieterliste

Meine Frage ist, wie kanalspezifische Informationen nach dem Generieren der Manifest-Datei für die Perfmon Tracing-Sitzung hinzugefügt werden? Ich möchte auch die Perfmon Tracing-Sitzung verwenden, um den Anbieter anstelle von Perfview zu aktivieren.

Jede Eingabe wird sehr geschätzt.

+0

hast du das funktioniert? Ich bin in der gleichen Situation und ein bisschen verloren! – Pedro

Antwort

8

MS veröffentlicht ein Nuget Paket, das die Klasse Eventsource nach dem Bauprozess registriert:

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

Registrieren Ihrer Eventsource

Wenn Sie das Eventsource NuGet Paket zu installieren, der Build-Schritt bereits erwähnt erzeugt die folgenden Dateien für jede Eventsource in Ihrer Anwendung:

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

Diese Dateien mit dem Betriebssystem registriert werden müssen Kanal zu ermöglichen, Unterstützung. Um dies zu tun, führen Sie den folgenden Befehl ein, nachdem die Dateien in ihrer endgültigen entfalteten Lage sind:

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

Sobald diese Registrierung Befehl ausgeführt wird, werden alle nachfolgenden Anrufe an MinimalEventSource.Log.Load(), von jedem Prozess auf Dieser Computer wird automatisch zu Ereignissen im Windows-Ereignisprotokoll führen.

Nach der Registrierung sollten Sie es in allen Tools sehen, die die installierten Anbieter lesen.

+0

Sie könnten müssen den Event Viewer nach der Registrierung neu starten. –

+0

Ich kann meine innerhalb von Perfmon, aber nicht Event Viewer -> Benutzerdefinierte Ansicht erstellen, selbst nach dem Neustart der Ereignisanzeige mehrere Male. – HashTagDevDude

0

Die EventSource-Implementierung verhindert, dass Sie den Kanal angeben, selbst wenn Sie das Manifest ändern. Wenn Sie ein Ereignis an ETW schreiben, übergeben Sie einen Deskriptorblock, in dem die Kanal-ID angegeben ist. Leider bietet EventSource keine Möglichkeit, dies über ein Attribut oder auf andere Weise einzustellen, und setzt dies immer auf Null, was bedeutet, dass kein Kanal verwendet wird.

EventSource verhält sich etwas anders als ein normaler ETW-Provider, da es sein Manifest nicht über eine win32-Ressource bereitstellt, sondern ein "bekanntes" ETW-Ereignis mit dem Manifest als Nutzlast sendet. Aus diesem Grund ist perfmon das einzige ETW-fähige Tool, das * Ereignisse erkennt, die von .NET 4.5 EventSource gesendet werden.

* Sie können immer Ereignisse mit perfmon oder anderen Tools wie dieser empfangen, aber sie sind nicht in der Lage, die Payload zu dekodieren, z. Parameter an WriteEvent übergeben.

EDIT: See answer to a similar question

Prost Lars

+0

Hallo Lars, Es gibt einen Weg, den ich nach ziemlich viel Forschung und Lesen gefunden habe, um die Ereignisse im Ereignisprotokoll zu protokollieren und sie in der Ereignisanzeige zusammen mit der Nutzlastdekodierung anzuzeigen ... siehe mein Dokument oben ... –