如何控制通过 EventSource 触发的 ETW 事件的 EventLevel?

How to control EventLevel for a ETW event triggered through EventSource?

我有这个 class 用于触发 ETW 事件:

public sealed class EventSourceWriter : EventSource
{
    public static EventSourceWriter Logger = new EventSourceWriter();

    [Event(1, Version = 0, Level = EventLevel.Informational)]
    public void Log(string Log)
    {
        WriteEvent(1, Log);
    }
}

如您所见,我将 Log 方法之上的 EventLevel 设置为属性值。有没有一种方法可以动态设置它以将不同的事件级别记录到同一事件?

我们的想法是在代理捕获 ETW 事件时,在相同的 table 上查看所有通用日志作为输出。

mike-z has pointed out for .NET 4.6 you might archive that by using dynamic events,但在这种情况下,这些事件不会包含在清单中,并且并非所有 ETW 工具都已更新以支持自描述事件。

但通常您会像这样编写 EventSource class 来存档:

public sealed class EventSourceWriter : EventSource
{
    public static EventSourceWriter Logger = new EventSourceWriter();

    [Event(1, Level = EventLevel.Informational)]
    public void LogInformational(string message)
    {
        WriteEvent(1, message);
    }

    [Event(2, Level = EventLevel.Warning)]
    public void LogWarning(string message)
    {
        WriteEvent(2, message);
    }

    [Event(3, Level = EventLevel.Error)]
    public void LogError(string message)
    {
        WriteEvent(3, message);
    }
}