2017-10-03 1 views
0

私はETWを利用しています。 コンソールログを実行しています。 EventSourceをインスタンス化してイベントをログファイルに記録しようとすると、806/807の警告コードが表示され、ログが保持されません。 (これらの警告は、 'EventSource'属性を追加するかどうかによって生成されます。ETW:イベントソース名を設定するイベントID 806/807

ただし、デフォルトのコンストラクタを使用し、イベントソースの名前を渡さず、デフォルトの属性値を使用すると、

実装例警告:

理想的
using Microsoft.Diagnostics.Tracing; 

[EventSource(Name = "MyApi")] 
public sealed class MyEventSource : EventSource 
{ 
    public MyEventSource(string name):base(name){ 
    } 

    private static readonly Lazy<MyEventSource> _instance = new Lazy<MyEventSource>(() => new MyEventSource()); 

    public static MyEventSource Log => _instance.Value; 
... 
} 

を、私は属性として私のEventSource名をハードコーディングし、単に利用できるオーバーロードされたコンストラクタを使用して、コンストラクタに私の名前を渡すことを避けるために希望

以前の投稿から有益な情報が見つかりましたが、残念ながら問題を解決できませんでした。Risk of missing events from ETW logging with EventSource

+0

?この怠惰は必須ではなく、単純に** public static MyEventSource Log = new MyEventSource(); **を使用してください – magicandre1981

答えて

1

EventSource v4.6で利用可能な動的に定義されたイベントを使用できます。 https://blogs.msdn.microsoft.com/vancem/2015/10/02/dynamically-defined-events-in-eventsource-v4-6/

記事からの例:あなたの本当のイベントが定義されて

EventSource Logger = new EventSoruce("MinimalEventSource"); 

Logger.Write("Load", new { ImageBase=10L, Name="AFile.dll" }); 

EventKeywords Loader = (EventKeywords)0x1; 
Logger.Write("Load", 
    new EventSourceOptions() { Level = EventLevel.Warning, Keywords = Loader }, 
    new { ImageBase = 10L, Name = "AFile.dll" } 
    ); 
関連する問題