2017-02-06 8 views
0

EventSource을 기반으로하는 사용자 정의 클래스로 ETW를 구현하려고합니다 (의도 한 디자인대로). 나는 base constructor(문자열 이름) 기본 생성자를 사용하여 작성된 사용자 정의 EventSources가 로깅되지 않습니다

public class TestSource : EventSource 
{ 
    public static readonly TestSource Log = new TestSource(); 

    public TestSource() : base() { } 

    public void LogMe(string msg) 
    { 
     WriteEvent(1, msg); 
    } 
} 

를 사용할 때 잘 로그를 볼 수 없지만 나는 constructor that lets you define the name

public TestSource() : base("TestSource") { } 

로그를 사용하여 전환 할 때 더 이상 표시하고 있습니다.

생성자 (I've used the flag to throw construction errors) 또는 로그 (used the flag for this as well)를 작성하기 위해 호출 할 때 문제가 없습니다. 또한 IsEnabled은 Visual Studio의 진단 이벤트 창에 소스를 추가하면 "true"입니다.

따라서 소스가 올바르게 등록되고 Write 메서드가 성공적으로 실행되지만 로그가 실제로 보내지지 않습니다. 모든 것은 내가 base()을 사용할 때와 같은 것처럼 보이지만 그 생성자를 사용하지 않으면 로그가 나타나지 않습니다. 누락 된 것이 있습니까? 아니면이 버그입니까?

public class TestController : ApiController 
{ 
    [EventSource(Name = "TestSource")] 
    public class TestSource : EventSource 
    { 
     public static readonly TestSource Log = new TestSource(); 

     public TestSource() : base() 
     { 
     } 

     public void LogMe(string msg) 
     { 
      WriteEvent(1, msg); 
     } 
    } 

    public IEnumerable<string> Get() 
    { 

     TestSource.Log.LogMe("Hello!"); 
     return new string[] {"value1", "value2"}; 
    } 
} 

(.이 매개 변수가없는 생성자를 사용하고 있기 때문 버전이 작동)

+0

실행하려는 전체 코드를 추가하십시오. – Sulyman

+0

LogMe에 [Event] 속성을 추가하십시오. – magicandre1981

+0

EventAttribute를 추가해도 변경되지 않습니다. –

답변

-1

당신 : 전체 코드에 대한 sulyman의 요청에 따라

,이 서비스 패브릭 서비스에서 실행되는 WebApi 컨트롤러에 기본 클래스의 생성자가 하위 클래스에서 볼 수 있도록해야합니다.

+0

감사합니다.하지만 관심사를 잘 모르겠습니다. EventSource는 프레임 워크의 일부입니다 (https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource(v= vs.110) .aspx), 사용자 지정 코드가 아닙니다. 생성자는 서브 클래스에서 볼 수 있고 사용할 수 있습니다. 또는 누락 된 로그 문제가 아닌 컴파일 문제 였을 것입니다. –