2012-04-04 5 views
0

Log4J에서 현재 SocketAppender을 사용 중이며 데이터를 원격 호스트에 전달할 때 특히 LocationInfo (클래스 이름, 행 번호 등)이 손실되는 문제가 있습니다. 나는 다음과 같은 코드를 변경하는 방법을 런타임시Log4JLogger를 확장하고 런타임 중에 하위 클래스를 호출하십시오.

import org.apache.commons.logging.impl.Log4JLogger; 

public class MyLogger extends Log4JLogger 
{ 
    ... 
     public void debug(Object message) 
     { 
      String extra = "Extra!"; 
      super.debug(message + extra); 
     } 
    ... 
} 

MyLogger 대신 Log4JLogger을 잡아 : 내가 무슨 짓을하면 다음과 같다?

private static Log logger = LogFactory.getLog(Test.class); 

답변

1

Logger를 확장 할 필요는 없지만 자신의 Appender를 구현하거나 필요한 Log4J Appender 기본을 확장하십시오. 예를 들어 AppenderSkeleton까지 확장 할 수 있습니다.

나는 왜 당신이 그것을 필요로하는지 정확히 상상할 수 없다. 또 다른 가능성은 Log4J Mapped Diagnostic Context 일 수 있습니다.

+0

분산 환경이있는 경우 MDC 및 NDC가 제대로 작동하지 않습니다 (본인의 독서에 따르면). 주요 문제는 SocketAppender가 LocationInfo를 가져 오는 것입니다. – Woot4Moo

+0

doc (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html)에서 " ... 이벤트는 클라이언트가 로컬로 기록한 것처럼 동일한 타임 스탬프, NDC, 위치 정보로 기록됩니다 ... "? 벌레 야? – dash1e

+0

버그이거나 구성 파일에 문제가 있습니다. 자세한 내용은 내 다른 질문을 참조하십시오 : http://stackoverflow.com/questions/9944681/log4j-socketappender-swallows-debug-information-from-remote-clients – Woot4Moo

관련 문제