簡體   English   中英

如何為@RestController啟用日志記錄?

[英]How to enable logging for @RestController?

如何在使用Spring編寫的REST服務上自動記錄任何傳入的GET URL請求?

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

我使用cxf for soap ,其中日志記錄就像使用@InInterceptors, @OutInterceptors注釋Web服務一樣簡單。

春天有什么類似的休息嗎?

如果您使用的是spring安全性,則可以啟用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>

這可能是一個黑客攻擊,但肯定很容易。 只需將@ModelAttribute注釋方法添加到控制器即可。 Spring每次調用任何處理程序方法之前都會調用它。 響應和請求對象可以添加到簽名中,Spring會注入它們:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM