2017-10-03 6 views
0

ETW를 사용 중입니다. 콘솔 로그를 실행 중입니다. 이벤트 소스를 인스턴스화하여 내 이벤트를 로그 파일에 기록하려고 시도하면 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 이름을 하드 코딩하고 간단하게 사용할 수있는 오버로드 된 생성자를 사용하여 생성자에 내 이름을 전달하는 것을 피하기하고 싶습니다

.3210

이전 게시물의 유용한 정보를 찾았지만 불행히도 내 문제를 해결하지 못했습니다. Risk of missing events from ETW logging with EventSource

+0

을 정의? 이 게으른 필요하지 않습니다, 단순히 사용 ** public static MyEventSource Log = new MyEventSource(); ** – magicandre1981

답변

1

EventSource 버전 4.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" } 
    );