2015-11-02 205 views
1

我們使用spring引導來編寫RESTFul Web服務。我們的應用程序中有大量的Web服務。新的要求現在在這裏。我的老闆讓我跟蹤每項服務請求。 例如:如果調用登錄服務,則必須使用計數,響應狀態和更少的細節來跟蹤它。有沒有辦法。類似於攔截器,它將在服務處理完成之後和服務響應之前被調用。跟蹤彈簧引導應用程序中的所有請求

回答

2

Spring Boot支持servlet過濾器,並允許您以與@Component相同的方式註冊它們(通過使用@Component註釋類並將其放置在Spring Boot將自動配置類的包中)

使用(ServletRequest req,ServletResponse res)對象檢索您需要的數據。

package application.basepackage.maybeafilterspecificpackage; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.stereotype.Component; 

@Component 
public class SimpleLoggingFilter implements Filter { 
    private final Logger logger = LoggerFactory.getLogger(SimpleLoggingFilter .class); 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     HttpServletRequest request = (HttpServletRequest) req; 
     String url = request.getServletPath(); 
     logger.info(url + " - " + request.getMethod()); 
     chain.doFilter(req, res); 
     logger.info(url + " - " + response.getStatus()); 
    } 

    public void init(FilterConfig filterConfig) {} 

    public void destroy() {} 

} 

我創建映射到/測試下面我收拾我的日誌是更具可讀性它簡單地返回字符串的@RequestMapping。

這一次,我有方法拋出一個異常

/test - GET 
/test - 500 
/favicon.ico - GET 
/favicon.ico - 200 

然後我固定它簡單地返回一個字符串

/test - GET 
/test - 200 
/favicon.ico - GET 
/favicon.ico - 200 

你說話,好像你需要一點點更多的權力在你的日誌但如果你使用嵌入式Tomcat,那麼更簡單的選擇是。

Spring Boot enable http requests logging

+0

感謝您的答覆。我將以不同的方式解析訪問日誌。需要敲定更好的方法 – Vamshi

相關問題