2016-02-04 41 views
0

我有這個類觸發ETW事件:如何控制通過EventSource觸發的ETW事件的EventLevel?

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

正如你所看到的,我設置了EventLevelLog方法,屬性值之上。有沒有一種方法可以動態設置它來記錄不同的EventLevels到同一個事件?

這個想法是當代理捕獲ETW事件時,將同一個表上的所有通用日誌看作輸出。

+1

在.NET 4.6,他們增加了[動態事件]支持(http://blogs.msdn.com/b/vancem /archive/2015/10/02/dynamically-defined-events-in-eventsource-v4-6.aspx)。請注意,這裏有一個指導文件,其中指出:「只要有可能,我們仍建議使用'基於合同'的方法。」 –

+0

謝謝.. @ mikez – Amit

回答

1

由於mike-z已經針對.NET 4.6指出了,您可以使用dynamic events對其進行歸檔,但在這種情況下,這些事件將不會包含在清單中,並且並非所有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); 
    } 
} 
相關問題