C# 向EventSource中的所有ETW事件添加字段

C# 向EventSource中的所有ETW事件添加字段,c#,etw,eventsource,etw-eventsource,C#,Etw,Eventsource,Etw Eventsource,目前,我的ETW事件定义如下: public class MyEventSource: EventSource { [Event(1, Level=Info)] public void WriteMyEvent(string Message) { WriteEvent(1, Message); } [Event(2, Level=Info)] public void WriteOtherEvent(string Details)

目前,我的ETW事件定义如下:

public class MyEventSource: EventSource
{
    [Event(1, Level=Info)]
    public void WriteMyEvent(string Message)
    {
        WriteEvent(1, Message);
    }

    [Event(2, Level=Info)]
    public void WriteOtherEvent(string Details) 
    {
        WriteEvent(2, Details);
    }
}
我想为这两个事件添加一个调用者不需要传入的字段。它是在应用程序配置中定义的静态字符串。我发现除了将它添加到
[Event]
修饰函数的参数中之外,没有其他方法可以将它添加到每个
WriteEvent
调用中

public class MyEventSource: EventSource
{
    public static readonly string MyDefault = "something";

    [Event(1, Level=Info)]
    public void WriteMyEvent(string Message, string Default = null)
    {
        // Ignore input "Default", use "MyDefault" instead
        WriteEvent(1, Message, MyDefault);
    }

    [Event(2, Level=Info)]
    public void WriteOtherEvent(string Details, string Default = null) 
    {
        // Ignore "Default"
        WriteEvent(2, Details, MyDefault);
    }
}

如果我通过一个base
[NonEvent]
方法来传递这些信息,它们会破坏输出。上面的代码块是我找到的将字段添加到每个事件的唯一方法。必须有更好的方法,但我至今还无法想出完美的谷歌搜索来找出如何做到这一点。

你想实现什么?记录一个单独的事件以记录信息我希望每个事件都记录它来自的环境名称使用ActivityID对它们进行分组,并使用环境名称引发1个事件,这样您就可以看到哪些事件具有相同的ActivityID,以及它们来自哪个环境。这是一种攻击,处理100多个微服务试图关联哪些日志来自我的“prod”环境,这是一个令人头疼的问题。不,ActivityID只是为您的案例添加的,您希望实现什么?记录一个单独的事件以记录信息我希望每个事件都记录它来自的环境名称使用ActivityID对它们进行分组,并使用环境名称引发1个事件,这样您就可以看到哪些事件具有相同的ActivityID,以及它们来自哪个环境。这是一种攻击,处理100多个微服务试图关联哪些日志来自我的“prod”环境,这是一个令人头疼的问题。不,ActivityID只是为您的案例添加的