2016-10-22 2 views
0

log4net의 LoggingEvent에 속성을 삽입하는 방법을 알아 내려고하고 있습니다. 이벤트가 로깅 방법을 통해 생성 될 때마다, 예를 들면 :log4net의 LoggingEvent에 속성 주입하기

log.Warn(...); 
log.Info(...); 
log.Error(...); 

내가 좋아하는 것이 만들어지는 LoggingEvent 속성 속성에 속성을 추가 할 수 있습니다.

리플렉터를 사용하여 이벤트의 레벨이 로거에 설정된 임계 값보다 크거나 같으면 로깅 메소드가 호출되면 결국 LoggingEvent 인스턴스가 인스턴스화된다는 것을 알 수 있습니다. 이 LoggingEvent에는 기본적으로 이름/값 쌍의 맵인 PropertiesDictionary 유형의 Properties 속성이 있습니다. 사용자가 추가 호출을하지 않아도 사전에 속성을 추가 할 수 있기를 바랍니다.

내가 이것을 할 수있는 유일한 방법은 어떻게 든 LogManager.GetLogger()에서 반환 된 로거를 래핑 할 수 있는지 여부입니다. 그리고 저는 그렇게하지 않겠지 만, 코드를 통해서는 될 수 없습니다. log4net 설정을 통해 이런 일이 발생해야합니다. 나는 주변을 둘러 보았고 컨피규레이션을 통해 랩핑 할 방법을 전혀 볼 수 없었다.

스레드 컨텍스트 개체에 속성을 추가하는 것도 효과가 있지만 사용자가 코드를 사용하지 않고 자동으로 수행해야한다고 생각합니다. 저를 위해 컨텍스트가 로그 문에 대해 생성 될 때마다 내 코드가 호출되도록 구성을 통해 스레드 컨텍스트 객체에 연결하는 방법이 있습니까?

감사합니다, 닉

답변

0

당신이 스택을 찾고있는 것처럼 보인다는 log4net의 특징 :

using(log4net.ThreadContext.Stacks["NDC"].Push("context")) 
{ 
    log.Info("Message"); 
} 
: stacks log4net

스택 컨텍스트 정보를 추가하고 메시지와 함께 기록 할 수 있습니다

로그 출력에 '컨텍스트'가 추가되므로 로그 라인 포맷터에 추가해야합니다.

+0

아니요, 사용자가 코드를 작성해야하므로 작동하지 않습니다. LoggingEvent가 생성 될 때마다 속성을 추가 할 수 있도록 내 코드를 삽입하는 방법을 찾고 있습니다. – nickdu