2010-12-16 5 views
2

내가 추적 레코드를 추가하기 위해 다음 방법을 사용하고 있습니다 : INT32 이벤트 ID를 나타냅니다이벤트 ID로 수신되는 추적을 필터링하는 방법은 무엇입니까?

TraceSource.TraceEvent(TraceEventType, Int32, String) 

.

그래서 지정된 이벤트 ID로만 수신 대기하도록 TraceSwitch에서 필터링하는 방법은 무엇입니까? 이건 불가능 해?

<system.diagnostics> 
    <sources> 
     <source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch>" 
      <listeners> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" /> 
      </listeners> 
     </source> 
    </sources> 
    <switches> 
     <add name="sourceSwitch" value="?" /> 
    </switches> 
</system.diagnostics> 

답변

5

이 가능하지만, 사용자 정의 TraceFilter를 작성하고 ShouldTrace 메소드를 오버라이드 (override) 할 필요가있다. id는 전달되지만, 즉시 사용할 수있는 필터는 지원하지 않습니다.

그런 다음 .config 파일에 다음과 같이 선언 할 수 있습니다 : 당신은 Ukadc.Diagnostics from codeplex을 시도 할 수

<source name="MyTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> 
    <listeners> 
    <add name="console" type="System.Diagnostics.ConsoleTraceListener"> 
     <filter type="YourNamespace.YourFilter, YourAssembly, ..." /> 
    </add> 
    </listeners> 
</source> 
1

. 이 프로젝트는 System.Diagnostics에 대한 유용한 확장을 제공합니다. 가장 멋진 점은 log4net과 NLog로 달성 할 수있는 것과 유사한 로그/추적 출력 형식을 정의하는 데 사용할 수있는 토큰 기반 시스템이라는 것입니다. 이는 구성 전용 종속성입니다. 즉, 코드에서 이미 TraceSources를 사용하고 있다면, Ukadc.Diagnostics를 컴퓨터에 설치하고 app.config가 TraceListeners, PropertyTokens 등을 가리 키도록하면됩니다.

System.Diagnostics를 사용하여 코드를 계측합니다 .TraceSource 개체.

Ukadc.Diagnostics를 사용하면 대부분의 속성 토큰 (EventId 포함)을 기반으로 필터링 할 수 있습니다.

토큰 시스템은 Ukadc.Diagnostics (또는 기본 TraceListener 클래스를 기반으로 작성하는 TraceListener)에서 제공되는 해당 TraceListeners에서만 (내가 아는 한) 사용할 수 있습니다.

저는 프로덕션 환경에서이 프로젝트를 사용하지 않았지만 그 프로젝트에 속지 만 상당히 인상 깊었습니다. 그것은 잘 작동하고 연장하기 쉽습니다.

관련 문제