2010-02-08 5 views
12

.NET을 사용하면 코드에 추적 문을 추가 할 수 있습니다. 사용할 수 있습니다카테고리를 통해 추적하는 방법?

Trace.WriteLine "(일부 메시지");

그런 다음 이러한 메시지를 로그 파일로 수집하는 추적 수신기를 정의하십시오. 지금까지 OK.

그러나 당신은 또한 수행 할 수 있습니다

Trace.WriteLine "(일부 메시지를", "범주");

"Category"의 특정 값을 가진 메시지 만 수신하도록 app.config (즉 .exe.config)에서 필터를 설정하는 방법은 무엇입니까? 설명서는 당신이 이것을 할 수 있음을 암시하지만, 어떻게 생각하는지는 알려지지 않습니다. 나는 (서브 시스템에 의해) 내 자신의 카테고리를 정의하고 필요한 경우 다양한 로그 파일로 추적을 라우팅 할 수 있어야한다.

(예, 모든 문제를 해결할 수있는 log4net에 대해 알고 있습니다.)

+0

솔루션에 대해 알고 있다면 왜 사용하지 않으시겠습니까? 당신은 정말로 바퀴를 재발 명하고 싶습니까? –

+6

프레임 워크의 기본 메커니즘을 활용하고 추가 구성 요소를 제공해야하는 필요성을 제거하는 것은 흥미로운 연습입니다. –

답변

2

당신은 카테고리 문자열 흔적을 필터링 할 TraceFilter의 구현을 코딩해야합니다. 그렇지 않은 경우 TraceEvent 메서드를 사용하고 EventTypeFilter을 사용하여 TraceEventType을 기반으로하는 추적을 필터링 할 수 있습니다.

필터를 수정하려면 EventTypeFilter에 대한 예제에서 설명한대로 app.config 파일을 사용하십시오.

+0

TraceFilter는 추상 클래스이므로 오류가 발생합니다. SourceFilter는 허용되지만 내 범주를 입력하고 작동시키는 방법을 볼 수 없습니다. –

+0

작성하여, 나는 고유 한 파생을 지정하는 것을 의미합니다. 그에 따라 편집하겠습니다. –

+1

고맙습니다. 나는 지금 내가 원하는 것을 얻는 필터 클래스를 작성했다. 그러나 기본 리스너 클래스는 제대로 작동하지 않으므로 (리플렉터가 구현에 일관성이 없음을 보여줌) 사용자 정의 리스너를 작성해야했습니다. 이 영역의 구현이 불완전하고 Microsoft의 명확한 설명서가없는 것으로 판단됩니다. –

0

TraceEvent에 대한 Jeff의 대답에 이어, TraceSource를 사용하여 상당히 세부적인 필터링을 성공적으로 설정했습니다. TraceSource는 사용자 정의 필터 등을 작성하는 경우에만 요구하는 것을 수행 할 수 있지만 TraceSource는 필요한 것을 제공 할 수 있습니다. http://bit.ly/dXgHa7의 Mike의 게시물은 스위치, 수신기 및 필터가 모두 TraceSource와 함께 효과적으로 작동하는 방식을 명확하게 보여줍니다.

0

여기에있는 것을 분명히하기 위해.

과 같은 라인이 작동하지 않습니다 :

Trace.Listeners["listener2"].Filter = new CategoryFilter("FooFilter", new List<string>(), CategoryFilterMode.DenyAllExceptAllowed); 

당신이 TraceFilter에 CategoryFilter를 할당 할 수 없습니다 때문입니다. 비 호환성을 입력하십시오. 여기에서 (OP에서) 의도는 이것을 성취하려는 것 같습니다. - app.config를 보면 어쩌면 할 수있는 것처럼 보이지만 프로그래밍 방식으로 코딩 할 때 유형 비 호환성이 더 분명합니다.

MS Doc에서 문제가 복잡해지기 때문에 LogSource에 TraceListener가 있지만 TraceListener에 CategoryFilter를 사용할 수 없다는 점이 복잡합니다. 유형은 한 방향으로 만 이동하며 Trace는 EntLib의 나머지 로깅 프레임 워크와 관련하여 "used by"관계의 맨 아래에 있어야합니다.

관련 문제