2010-11-29 5 views
1

누군가이 질문에 더 적합한 제목을 권합니다. 무엇을 넣어야할지 모르겠습니다.log4net 사용자 정의 로깅

지금 우리는 로그 된 메시지에 약간의 텍스트를 추가하는 ILog 인스턴스 주위에 로그 래퍼를 가지고 있습니다. 내가 대신하고 싶은 것은 ILayout 또는 ILogger 또는 IAppender를 구현하는 것이며, 이는 우리의 구성 XML에서 지정 될 수 있습니다. 앞에 붙이고 싶은 텍스트는 정적이 아닙니다. 모든 로그 항목에서 사용되기 때문에 코드에서 로그 메시지를 작성하는 모든 곳이 아닌 한 번 구현해야합니다.

의미가 있습니까? 어떤 인터페이스를 구현해야합니까? 지금 우리는 PatternLayout을 사용한다.

+0

MS 엔터프라이즈 라이브러리 로깅 응용 프로그램 블록을 보았습니까? – mcass20

+0

아니요,하지만 우리는 몇 년 동안 log4net을 사용해 왔으며 만족했습니다. – Amy

+0

각 로그 메시지에 정확히 어떤 종류의 정보를 추가할지에 대한 자세한 정보가 유용 할 것입니다. 구성 파일에 "정적"텍스트를 구성 하시겠습니까? 추가 할 텍스트가 런타임시 엄격하게 결정됩니까? 현재 텍스트에 메시지를 추가하는 방법에 대한 샘플 코드가 있습니까 (아마도 log4net에 대한 호출 사이트일까요?) – wageoghe

답변

2

사용자 정의 PatternLayoutConverter 구현에 동의합니다. 예 다음 두 :

이것은 하나의 출력으로 System.Diagnostics.Trace.CorrelationManager.ActivityId를 추가

이 하나가 매개 변수화

(이를 사용할 수있는 키를 구성 할 수

public class ActivityIdLayoutConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     writer.Write(Trace.CorrelationManager.ActivityId.ToString()); 
    } 
    } 

class KeyLookupPatternConverter : PatternLayoutConverter 
    { 
    protected override void Convert(System.IO.TextWriter writer, LoggingEvent loggingEvent) 
    { 
     string setting; 
     //Option is the key name specified in the config file 
     if (SomeDictionaryWithYourValues.TryGetValue(Option, out setting)) 
     { 
     writer.Write(setting); 
     } 
    } 
    } 

Here is a link 나는 키 값을 취할 수 PatternLayoutConverter를 만드는 방법에 대해 묻는 질문에 다음 GDC 또는 MDC)과 유사 - 사전에서 값을 검색합니다. log4net 및 NLog에서 구성하는 방법 및 구성 방법을 보여줍니다.

또는 log4net 로거를 래핑 할 수 있으며 래퍼의 "로그"메소드에서 입력 메시지를 수정하거나 사용자 정의 값을 GlobalDiagnosticContext.Properties 또는 ThreadDiagnosticContext.Properties에 넣을 수 있습니다. 일반 특성 토큰 메소드를 통해 출력.

4

그것은 당신이 (여러 펜더를 사용하는 경우, 예를 들어)를 재사용 할 계획 방법에 따라 다르지만 로그 메시지의 텍스트을 변경하기 때문에, ILayout 최선의 선택처럼 들린다.

PatternLayout을 상속하고 Format에 내 콘텐츠를 제출할 수 있습니다.

0

앱에 의존성 삽입을 사용하여 나중에 원하는 방식으로 로깅을 변경할 수 있습니다.

+0

그건 약간 극단적이며 원하는 변경 사항의 범위를 벗어납니다. log4net.xml 파일에서 인터페이스를 구현하고 지정하는 것이 훨씬 간단합니다. – Amy

관련 문제