写了个牛逼的日志切面,甩锅更方便了( 三 )

<>();for (int i = 0; i < paramNames.length; i++) {Object value = http://kandian.youth.cn/index/paramValues[i];//如果是文件对象if (value instanceof MultipartFile) {MultipartFile file = (MultipartFile) value;value = file.getOriginalFilename();//获取文件名}requestParams.put(paramNames[i], value);}return requestParams;}@Datapublic class RequestInfo {private String ip;private String url;private String httpMethod;private String classMethod;private Object requestParams;private Object result;private Long timeCost;}@Datapublic class RequestErrorInfo {private String ip;private String url;private String httpMethod;private String classMethod;private Object requestParams;private RuntimeException exception;}}赶紧给你们的应用加上吧【如果没加的话】 , 没有日志的话 , 总怀疑上层出错 , 但是却拿不出证据
写了个牛逼的日志切面,甩锅更方便了文章插图
关于 traceId 跟踪定位 , 可以根据 traceId 跟踪整条调用链 , 以 log4j2 为例介绍如何加入 traceId

  • 添加拦截器
public class LogInterceptor implements HandlerInterceptor {private final static String TRACE_ID = "traceId";@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String traceId = java.util.UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();ThreadContext.put("traceId", traceId);return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {ThreadContext. remove(TRACE_ID);}}在调用前通过 ThreadContext 加入 traceId , 调用完成后移除
  • 修改日志配置文件 在原来的日志格式中添加 traceId 的占位符
[TRACEID:%X{traceId}] %d{HH:mm:ss.SSS} %-5level %class{-1}.%M()/%L - %msg%xEx%n
  • 执行效果

写了个牛逼的日志切面,甩锅更方便了文章插图
日志跟踪更方便
DMC 是配置 logback 和 log4j 使用的 , 使用方式和 ThreadContext 差不多 , 将 ThreadContext.put 替换为 MDC.put 即可 , 同时修改日志配置文件 。
log4j2 也是可以配合 MDC 一起使用的
写了个牛逼的日志切面,甩锅更方便了文章插图
MDC 是 slf4j 包下的 , 其具体使用哪个日志框架与我们的依赖有关 。