====== Spring @MVC에서 컨트롤러 정보 확인 ======
===== Spring 3.1 =====
Spring 3.1 부터 Interceptor에 넘겨주는 handler 가 [[http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/method/HandlerMethod.html|HandlerMethod]]라는 클래스의 객체로 변경되었다. 단, 일부 핸들러의 경우 다른 클래스의 객체가 넘어오는 경우가 있으므로 검사를 해야한다.
로그를 남기는 인터셉터를 만들고 handler 객체에서 클래스 정보와 메소드 정보를 뽑아서 로그로 남기면 된다.
if (!(handler instanceof HandlerMethod)) {
log.debug("Current Request Handler : {}", handler.getClass().getCanonicalName());
return;
}
HandlerMethod method = (HandlerMethod)handler;
log.debug("Current Request Handler : {}.{}()", method.getBeanType().getCanonicalName(), method.getMethod().getName());
===== Spring 3.0 =====
Spring @MVC를 사용할 경우, 웹브라우저를 통해 요청을 했을 때 어떤 컨트롤러가 해당 요청을 처리하는지 금방 알아내기 어려울 때 사용한다.
아래는 Spring 3일 경우이며, Spring 버전에 따라 어떤 로거에서 관련 로그를 남기는지 여부는 바뀔 수 있다.
# log4j 등 로거에서 처리할 것
# 컨트롤러 클래스와 메소드가 로그로 남는다.
log4j.logger.org.springframework.web.bind.annotation.support.HandlerMethodInvoker = DEBUG
# 어떤 뷰를 사용하는지 여부가 로그로 남는다.
log4j.logger.org.springframework.web.servlet.DispatcherServlet = DEBUG
이제, [[eclipse:grepconsole|Eclipse Grep Console]]에서 두 종류의 정규표현식을 등록해두면 편하게 볼 수 있다.
* ''.*Rendering view (.*)'' : 뷰 정보 로그를 강조해 보여줌
* ''.*Invoking request handler method: (.*)'' : 컨트롤러와 메소드 정보 로그를 강조해 보여줌