SpringMVC Logging
From JCFWiKi
클라이언트로부터 전달된 요청은 비즈니스 단과는 상관 없으므로 스프링 MVC 에서 처리하도록 설정하며, 이때 다음과 같은 사항을 고려하도록 한다.
- 1. 일괄적으로 설정되도록 하여 개별 개발자가 신경쓰지 않도록 한다.
- 2. 스프링 MVC의 요청 처리 흐름에 있어서 기본적으로 확장 가능한 메커니즘을 우선 고려한다.
AOP 기술을 사용하여 로그를 구현할 수도 있겠으나, 위의 항목에 따라 기본적으로 고려해 볼 수 있는 방법은 인터셉터 매커니즘이다.
인터셉터는 디스패처 서블릿에서 개별 컨트롤 클래스를 수행하기 전후로 순차적으로 적용되는 모듈이다.
요청 수행 프로세스 상 적합한 위치에서 로그를 처리할 수 있는 모듈이며, 사용도 매우 단순하다. 다음은 로깅 인터셉터를 설정하는 서블릿 XML이다.
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="loggingHandlerInterceptor"/> </list> </property> </bean> <bean id="loggingHandlerInterceptor" class="jcf.web.springmvc.LoggingHandlerInterceptor" />
(주의) 위의 설정 방식은 Annotation의 경우에 설정되는 방법이다.
로깅 인터셉터는 다음과 같이 구현한다.
public class LoggingHandlerInterceptor implements HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handl throws Exception { // 요청 별로 남기고 싶은 로그를 여기서 처리한다. return true; } // public void postHandle(..) 로 컨트롤 수행 결과의 로그를 남길 수도 있다. // public void afterCompletion(..) 로 컨트롤 수행 상에서 예외 발생시 로그를 남길수도 있다. }

