.net-4.0 - EventSource .net 4.0 生成 list

标签 .net-4.0 event-log system.diagnostics etw etw-eventsource

我一直在尝试在 .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 的回答是正确的,因为没有必要使用较新版本的 .NETEventSource 生成 list 。 (事实上​​,它仍在发生,但它只是隐藏在构建事件后面,当您安装 EventSource package 时,该事件会被放入您的项目文件中。)

但是,根据您正在执行的操作,您可能仍然需要手动生成 list 。这是一种方法:

  1. 安装 EventSource package (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}

之后,您将看到 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/

相关文章:

c# - 向等待 TCP 的线程发送指令?

c# - 不同文化的日期时间转换

c# - 为什么 EventRecord.FormatDescription() 返回 null?

c# - CounterSample 中的时间字段是什么意思?

.net 诊断最佳实践?

c# - .net 4.0 路由与 QueryStrings

sql - (Windows) 异常处理 : to Event Log or to Database?

c# - 是否有 C++ 的 System.Diagnostics.EventLog 等效项?

c# - 我的进程在等待输入吗?

web-services - IIS 7.5 抛出 sc-win32-status : 995 after 60 seconds on web service (ASMX) request