如何控制通过事件源触发的 ETW 事件的事件级别

本文关键字:事件 ETW 事件源 何控制 控制 | 更新日期: 2023-09-27 18:33:12

我有这个用于触发 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事件时查看与输出相同的表上的所有通用日志。

如何控制通过事件源触发的 ETW 事件的事件级别

正如 mike-z 为 .NET 4.6 指出的那样,你可以使用动态事件将其存档,但在这种情况下,这些事件不会包含在清单中,并且并非所有 ETW 工具都已更新为支持自描述事件。

但通常,您像这样编写 EventSource 类来存档:

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);
    }
}