作者:泥瓦匠
今天给大家分享下我对 API 接口文档小结 & 应用日志链路追踪(基于 SLF4J MDC )
API 文档的目的:
API 文档的设计规则:
资料:
这其实个小技巧。不管单应用还是分布式,当一个请求到一个应用。这个请求在这个应用的调用链路,日志链路怎么更方便的找到?即每一个会话的日志的列表
有人说:每个 log 都透传这个请求的 requesId。没错这样可以,但这样就麻烦了。
基于 SLF4J MDC,利用拦截器的方式去做,就相对来说会比较优雅。
SLF4J 工具类 MDC ,支持 logback 和 log4j,工具的作用是放一些特定的变量值到日志中。
具体操作如下:
通过 HandlerInterceptor 或者 Filter 一样的道理,实现日志拦截。伪代码如下:LOG_UUID 就是每次会话的日志的 UUID
public class LogInterceptor implements HandlerInterceptor {
private final static String LOG_UUID = "logUUID";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String logUUID = java.util.UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
MDC. put(LOG_UUID, logUUID);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// MDC删除
MDC. remove(LOG_UUID);
}
}
logback 里面配置:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>
%d|%thread|%X{LOG_UUID}|%-5level|%logger{65}|%msg%n
</pattern>
</encoder>
这么简单你可得到如图所示的效果:
红圈的就是调用链路了...
快去试试吧。