EventSource .net 4.0 GenerateManifest

Я пытался работать с ETW в.net 4.0.

Я начал использовать библиотеку Microsoft EventSource 1.0.4-beta ( https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource).

Вот код, который я написал для генерации событий для моего приложения.

[EventSource(Name = "Samples-EventSourceDemos-EventSourceLogger")]
public sealed class EventSourceLogger : EventSource
{
    public static EventSourceLogger Log = new EventSourceLogger();

    public static string GetManifest()
    {
        return GenerateManifest(typeof(EventSourceLogger), null);
    }

    [Event(200, Level = Microsoft.Diagnostics.Tracing.EventLevel.Informational, Task = EventTask.None, Version = 1,
        Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin,
        Message = "Test Message")]
    public void LogEtwInfoEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(200, jsonArgs);
    }

    [Event(400, Level = Microsoft.Diagnostics.Tracing.EventLevel.Error, Task = EventTask.None, Version = 1,
        Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin, Message = "Test Message")]
    public void LogEtwErrorEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(400, jsonArgs);
    }

    [Event(500, Level = Microsoft.Diagnostics.Tracing.EventLevel.Warning, Task = EventTask.None, Version = 1,
       Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin, Message = "Test Message")]
    public void LogEtwWarningEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(500, jsonArgs);
    }
}

Я не могу сгенерировать манифест от слушателя. Код ниже

var manifestXml = EventSourceLogger.GetManifest();

Когда я пытаюсь вызвать это, я получаю NullReferenceException, пожалуйста, предложите мне пропустить что-нибудь. Можно ли отправить EventMessage в EventViewer с помощью этой версии.

Как часть этого пакета NuGet, у меня есть EventRegister, Install Bat, Microsoft.Diagnostics.Tracing.EventSource.targets. Я не совсем уверен, как это могло бы помочь в создании.

Если у кого-то есть какие-либо идеи (или) поработали над этим, пожалуйста, помогите.

Заранее спасибо.

3 ответа

Решение

Я смог найти решение для этого. Теперь я могу зарегистрироваться и опубликовать события для просмотра событий.

http://naveensrinivasan.com/2010/03/17/using-clr-4-0-event-tracing-for-windows-etw-along-with-application-etw/

Благодарю.

Ответ @magicandre1981 является правильным в том смысле, что нет необходимости создавать манифесты с более новыми версиями .NET а также EventSource, (На самом деле, это все еще происходит, но оно просто было скрыто за событием сборки, которое помещается в файл вашего проекта при установке пакета EventSource.)

Однако, в зависимости от того, что вы делаете, вам все равно может понадобиться сгенерировать манифест вручную. Вот один из способов сделать это:

  1. Либо установите пакет EventSource (Install-Package Microsoft.Diagnostics.Tracing.EventSource) в ваш проект или скачайте и распакуйте его там, где вам нужно
  2. Найдите eventRegister.exe, (Скорее всего, это будет где-то в папке, похожей на packages\Microsoft.Diagnostics.Tracing.EventRegister.1.1.26\build относительно папки установки пакета)
  3. Запустите следующую команду:

eventRegister.exe {path-to-dll-with-your-eventsource-class} {manifest-output-file-prefix}

После этого вы увидите два файла для каждого класса EventSource, который есть в dll:

  • {префикс}{Имя источника событий}.etwManifest.dll
  • {префикс}{Имя источника событий}.etwManifest.man

И это те, которые вы можете кормить

wevtutil.exe im {EtwManifestManFile} /rf:"{EtwManifestDllFile}" /mf:"{EtwManifestDllFile}"

Вам не нужно больше получать манифест. Теперь вы можете напрямую зарегистрировать EventSource:

Регистрация вашего EventSource

Когда вы устанавливаете пакет EventSource NuGet, ранее упомянутый шаг сборки создает следующие файлы для каждого EventSource в вашем приложении:

AssemblyName.EventSourceTypeName.etwManifest.man

AssemblyName.EventSourceTypeName.etwManifest.dll.

Эти файлы должны быть зарегистрированы в операционной системе, чтобы включить поддержку каналов. Для этого вы запускаете следующую команду после того, как файлы находятся в их окончательном расположении:

wevtutil.exe в EtwManifestManFile / rf: "EtwManifestDllFile" c / mf: "EtwManifestDllFile"

Microsoft объяснила это в этом блоге:

Объявление о пакете EventSource NuGet - запись в журнал событий Windows

Другие вопросы по тегам