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 ответа
Я смог найти решение для этого. Теперь я могу зарегистрироваться и опубликовать события для просмотра событий.
Благодарю.
Ответ @magicandre1981 является правильным в том смысле, что нет необходимости создавать манифесты с более новыми версиями .NET
а также EventSource
, (На самом деле, это все еще происходит, но оно просто было скрыто за событием сборки, которое помещается в файл вашего проекта при установке пакета EventSource.)
Однако, в зависимости от того, что вы делаете, вам все равно может понадобиться сгенерировать манифест вручную. Вот один из способов сделать это:
- Либо установите пакет EventSource (
Install-Package Microsoft.Diagnostics.Tracing.EventSource
) в ваш проект или скачайте и распакуйте его там, где вам нужно - Найдите
eventRegister.exe
, (Скорее всего, это будет где-то в папке, похожей наpackages\Microsoft.Diagnostics.Tracing.EventRegister.1.1.26\build
относительно папки установки пакета) - Запустите следующую команду:
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