【问题标题】:How to enable logging for @RestController?如何为@RestController 启用日志记录?
【发布时间】:2015-02-20 16:50:43
【问题描述】:

如何在使用Spring 编写的REST 服务上自动记录任何传入的GET url 请求?

@RestController
public class MyRest {
    @RequestMapping(method = RequestMethod.GET,
            produces = MediaType.APPLICATION_XML_VALUE)
    @ResponseBody
    public ComplexRsp test() {
        //...
    }
}

我将cxf 用于soap,其中记录与使用@InInterceptors, @OutInterceptors 注释Web 服务一样简单。

春天有没有类似的东西可以休息?

【问题讨论】:

    标签: java spring web-services rest


    【解决方案1】:

    如果你使用的是spring security,你可以只启用log4j org.springframework.security,但它非常冗长:

    <category name="org.springframework.security">
       <priority value="ALL" />
    </category>
    

    或者你可以实现一个拦截器:

    public class LoggerInterceptor extends HandlerInterceptorAdapter {    
        private static final Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            logger.info("pre hangle URI: " + request.getRequestURI());
    
            return super.preHandle(request, response, handler);
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            logger.info("post hangle URI: " + request.getRequestURI());
    
            super.afterCompletion(request, response, handler, ex);
        }    
    }
    

    applicationContext.xml

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**" />
            <bean class="com.mycompany.LoggerInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
    

    【讨论】:

    • 详细日志记录对我没有用,但拦截器看起来很有希望。仅使用基于 spring4 注释的配置时如何添加他,没有任何 xml?
    【解决方案2】:

    这可能有点小技巧,但肯定很简单。只需将 @ModelAttribute 注释方法添加到您的控制器。 Spring 将在每次调用任何处理程序方法之前调用它。响应和请求对象可以添加到签名中,Spring会注入它们:

    @ModelAttribute
    protected void logging(HttpServletRequest request, HttpServletResponse response) { 
      // do your logging here
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2015-08-31
      • 2012-04-27
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多