打印日志的好处有很多,那么不多废话了,举两种实现全局日志的打印:
全局日志请求参数、返回参数、耗费时长等
- 通过拦截器来实现日志打印:
public class RewriteHttpServletRequestFilter implements Filter {
protected final static Logger LOGGER = LoggerFactory.getLogger(RewriteHttpServletRequestFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
long startTime = Instant.now().toEpochMilli();
ServletRequest requestWrapper = null;
if(request instanceof HttpServletRequest) {
requestWrapper = new RequestReaderHttpServletRequestWrapper(request);
}
LOGGER.info(LogFamater.LOG_FORMAT, ApplicationContext.getInterfaceName(), ApplicationContext.getCallUUID(), LogFamater.COME_IN, "<----------请求开始---------->");
//获取请求中的流如何,将取出来的字符串,再次转换成流,然后把它放入到新request对象中。
// 在chain.doFiler方法中传递新的request对象
if(requestWrapper == null) {
chain.doFilter(request, response);
} else {
chain.doFilter(requestWrapper, response);
}
long endTime = Instant.now().toEpochMilli();
long elapsed_time = endTime - startTime;
LOGGER.info(LogFamater.LOG_FORMAT, ApplicationContext.getInterfaceName(), ApplicationContext.getCallUUID(), LogFamater.REQUEST_ELAPSED_TIME, elapsed_time);
LOGGER.info(LogFamater.LOG_FORMAT, ApplicationContext.getInterfaceName(), ApplicationContext.getCallUUID(), LogFamater.GO_OUT, "<----------请求结束,耗时"+elapsed_time+"(毫秒)---------->");
ApplicationContext.clearContextVariable();
}
@Override
public void destroy() {