我一直在尝试在 .net 4.0 中使用 ETW。
我已开始使用 Microsoft EventSource Library 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);
}
}
我无法从监听器生成 list 。代码如下
var manifestXml = EventSourceLogger.GetManifest();
当我尝试调用此方法时,我收到 NullReferenceException,请建议我是否遗漏了任何内容。是否可以使用此版本将 EventMessage 推送到 EventViewer。
作为此 NuGet 包的一部分,我有 eventRegister、Install Bat、Microsoft.Diagnostics.Tracing.EventSource.targets。我不太确定这些将如何帮助 list 生成。
如果有人对此有任何想法(或),请提供帮助。
提前致谢。
最佳答案
@magicandre1981 的回答是正确的,因为没有必要使用较新版本的 .NET
和 EventSource
生成 list 。 (事实上,它仍在发生,但它只是隐藏在构建事件后面,当您安装 EventSource package 时,该事件会被放入您的项目文件中。)
但是,根据您正在执行的操作,您可能仍然需要手动生成 list 。这是一种方法:
- 安装 EventSource package (
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}
之后,您将看到 dll 中的每个 EventSource 类都有两个文件:
- {前缀}{事件源名称}.etwManifest.dll
- {前缀}{事件源名称}.etwManifest.man
然后您可以将这些内容提供给 wevtutil :
wevtutil.exe
im {EtwManifestManFile}
/rf:"{EtwManifestDllFile}"
/mf:"{EtwManifestDllFile}"
关于.net-4.0 - EventSource .net 4.0 生成 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18913364/