在SpringBoot项目中添加logback的MDC
来源:互联网 发布:ie加载项里面没有java 编辑:程序博客网 时间:2024/06/04 00:43
先看下MDC是什么
Mapped Diagnostic Context,用于打LOG时跟踪一个“会话“、一个”事务“。举例,有一个web controller,在同一时间可能收到来自多个客户端的请求,如果一个请求发生了错误,我们要跟踪这个请求从controller开始一步步都执行到了哪些代码、有哪些log的输出。这时我们可以看log文件,但是log文件是多个请求同时记录的,基本无法分辨哪行是哪个请求产生的,虽然我们可以看线程,但线程可能被复用,也是很难分辨出,这时MDC就派上用场了。
我们可以加一个web filter,在请求进来时,把”标识“放到MDC context中,比如:put( ip, 8.8.8.8), put(username, 'yang'),在filter结束时把context再清掉,即可在整个请求处理过程中,都可以打印出ip, username这些数据,就可以方便的用于日志跟踪。
在SpringBoot中怎么用
1. 写一个LogInterceptor,用于统一处理MDC:
@Componentpublic class LogInterceptor implements HandlerInterceptor { private final static String REQUEST_ID = "requestId"; private static final Logger LOGGER = LoggerFactory.getLogger(LogInterceptor.class); @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { String xForwardedForHeader = httpServletRequest.getHeader("X-Forwarded-For"); String remoteIp = httpServletRequest.getRemoteAddr(); String uuid = UUID.randomUUID().toString(); LOGGER.info("put requestId ({}) to logger", uuid); LOGGER.info("request id:{}, client ip:{}, X-Forwarded-For:{}", uuid, remoteIp, xForwardedForHeader); MDC.put(REQUEST_ID, uuid); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { String uuid = MDC.get(REQUEST_ID); LOGGER.info("remove requestId ({}) from logger", uuid); MDC.remove(REQUEST_ID); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { }}关键代码在于:MDC.put(REQUEST_ID, uuid);2. 注册一下这个Interceptor,写一个WebMvcConfigurer类:
@Configurationpublic class WebMvcConfigurer extends WebMvcConfigurerAdapter { @Autowired private LogInterceptor logInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(logInterceptor); super.addInterceptors(registry); }}
3. 放一个logback.xml到src/main/resources/目录中,用于配置logback的参数,如没有,请新建一个
<configuration scan="true" scanPeriod="30 seconds" debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <encoder> <pattern>[%date{ISO8601}] [%-5level] - [%thread] [%X{requestId}] [%logger] [%X{akkaSource}] - %msg %rootException %n </pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> </root></configuration>注意这个<pattern/>中配置了输出 requestId
4. 最后看下效果,下面加粗的即为requestId
[2017-12-14 16:08:45,677] [INFO ] - [http-nio-8080-exec-1] [a08f86cd-6743-48ce-816a-f5ee61b802b8]
阅读全文
0 0
- 在SpringBoot项目中添加logback的MDC
- logback的MDC简单实用
- logback mdc
- springBoot中Logback日志的使用
- SpringBoot中配置logback
- springboot中使用logback
- 在springboot项目中访问mongodb的
- Logback中的MDC
- logback的使用和logback.xml详解,在Spring项目中使用log打印日志
- Slf4j MDC 使用和 基于 Logback 的实现分析
- springboot中logback打印日志
- springboot(二)添加logback日志
- Springboot(一)添加Logback日志
- springboot(二)添加logback日志
- SpringBoot日志logback的使用
- 在IDEA中导入Gradle构建的SpringBoot Web项目(SpringBoot-02)
- 为web项目添加logback
- web项目添加logback日志
- 手动释放(dispose)对象空间和跟踪引用计数
- 爬虫1.1爬取斗图啦图片(关于open函数和urlretrieve函数)
- Python用户推荐系统曼哈顿算法实现
- 剑指offer——面试题42:翻转单词序列
- 如何把自媒体平台文章同步到WordPress等网站
- 在SpringBoot项目中添加logback的MDC
- Android的manifest中Application属性supportsRtl的作用
- 2017/12/14 《心的开始,新的启航》
- jmeter上传文件
- 集成Android 科大讯飞免费在线语音合成播报功能(附源码)
- Hadoop2.9.0安装与配置(一)Linux centos7系统的安装与配置
- 【记录】memcpy后报错:segmentation fault
- 深度增强学习入门笔记(一)
- github相关