2010-07-01 2 views
6

저는 현재 최대 절전 모드에서 일부 지연로드 호출의 소스를 추적하려고합니다. 그렇게하는 가장 쉬운 방법은 지연로드가 발생할 때마다 최대 절전 모드 SQL 로깅을 설정 한 다음 스택 추적을 이상적으로 트리거하는 것입니다 로거가 사용될 때마다 출력됩니다. 지금은 SLF4j를 사용하고 Log4j를 로깅 구현으로 사용하는 Hibernate 3.5.2를 사용하고 있습니다.특정 로거가 사용될 때마다 스택 트레이스를 트리거하는 방법이 있습니까?

나는 모든 로깅 호출을 둘러싸고 SQL 로거에 대한 호출이 있는지 확인하기 위해 AOP를 사용할 수 있다고 가정한다. 그러나 이것은 무거운 짐을 건지는 것처럼 보이고 나는 전에 놓친 간단한 접근 방법이 있는지 알고 싶었다. 그 길로 내려 갔다.

답변

5

log4j 애 퍼런 자 중 하나를 확장하여 log4j.xml에서 사용할 수 있습니다. 의 log4j.xml에서

public class StackPrintingFileAppender extends FileAppender { 
    protected void subAppend(LoggingEvent event) { 
     new Exception().printStackTrace(new PrintWriter(qw)); 
     super.subAppend(); 
    } 
} 

다음 :

<appender name="logger" class="StackPrintingFileAppender"> 
    ... 
</appender> 
+0

덕분에, 정확히 내가 원하는 물건의 종류를 이잖아. 그것은 내가 원했던 것을 실제로 수행하지 않는다. (내가 원하는 범주의 인쇄 스택 트레이스 만, 스택 트레이스를 인쇄하고 싶다면 LoggingEvent를 검사 할 수있다.) – Jherico

+0

appender가 만지도록 Narrow한다. 당신이보고 싶은 것을 위해 활동적입니다. –

0

자신 만의 SLF4j 브리지를 작성하여 Log4j 대신 클래스 패스에 넣을 수 있습니다. 그런 다음 Log4j에 위임 할 수 있지만 AOP가 없으면 적절하게 호출을 가로 챌 수 있습니다. 계측기가 더 간단 해 보이며 올바른 로거를 파악하고 지연로드가 발생하는 경우 AOP 이상으로 추가로 어려움을 겪지 않습니다.

관련 문제