2012-11-27 2 views
1

스프링 웹 애플리케이션이 있습니다. 로깅 동작을 변경하여 세션 범위의 빈에 저장된 로그인 된 사용자의 이름 앞에 항상 로그 행을 추가하고 싶습니다. 우리는 log4j를 사용하고 있습니다. 로깅하지만 스프링 관리가 아닌 많은 클래스가 있습니다. 우리는 일부 AOP를 사용하지만, AspectJ가 아닌 모든 Spring AOP이므로 log4j 동작을 전역 적으로 수정할 수는 없다. (어리석은 로깅 개선을위한 AspectJ 소개는 좋은 생각처럼 들리지 않는다.)로깅 용 스프링 세션 빈 사용하기

나는 이것을하기에는 아무런 제정신이 아닐 수 없다. 모든 위임,

NDC.push(getUsername()); 
try { 
    .... 
} 
finally { 
    NDC.pop(); 
} 

당신이 봄 디스패처 서블릿을 사용하는 경우, 당신은 당신의 자신의 서블릿의 디스패처 서블릿을 포장 수 : 서블릿에서

답변

1

, 당신은에 그렇게 log4j에의 중첩 된 진단 컨텍스트를 사용할 수 있습니다 디스패처 서블릿에 대한 호출을 수행하고 거기에 NDC 항목을 추가합니다.

+0

흥미 롭습니다. 감사합니다. 나는 그것을 줄 것이다. –

+1

내가 당신이라면 MDC를 사용할 것입니다 (예 : log4j 형식, "사용자 = % X {사용자}, 경로 = % X {경로}"). 그리고 저는 새로운 서블릿을 작성하지 않을 것입니다 - 필터를 사용하십시오. –

+0

@DaveSyer 예, MDC가 더 좋을 것 같습니다. 그래도 바람둥이 필터를 사용하고 싶지는 않으므로 아마도 Spring AOP를 사용하여 설정해야 할 것입니다. –