如何使用MDC快速查询应用接口全部执行日志


这篇文章主要介绍“如何使用MDC快速查询应用接口全部执行日志”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用MDC快速查询应用接口全部执行日志”文章能帮助大家解决问题。MDC是日志门面框架SLF4J提供的一个类,可以提供在多线程情况下记录日志的功能,log4j、logback、log4j2都有对这个类的实现。从本质上来说,MDC可以看做一个ThreadLocal,由于其线程安全的特性,可以让我们轻松安全的保存数据。MDC主要的API有clear()、get()、put()、remove()方法等,简洁的api让我们使用上手基本没有难度。1,修改日志打印格式以日志框架logback为例,在logback.xml中,找到日志打印规则的配置,添加**-%X{reqId}** 属性,其中reqId可以任意指定,你写其他的属性也可以,博主这里演示指定为reqId。2,添加过滤器MDCFilterps.使用拦截器也可以,效果是一样的。对每个接口做拦截。经过简单的两步就配置好了,下面我们看一下效果。每一行日志都有一个关键字reqId免费云主机域名:9723829830,这样我们查询日志时只需要查询关键字9723829830就可以直接查出来这个接口所有的执行记录了。如果想更方便的话,也可以把这个关键字直接输出到每一个接口的响应头或者响应体中。对于普通的web应用我们可以直接拦截每个接口,自动生成一个请求id,那么对于微服务项目,一个接口可能会产生很多服务的调用,那如何一次性查出来所有系统内的日志呢?对于日志的搜集本文暂不考虑,咱们先说如何做请求id的传递。其实也很简单,当我们有多个系统间的调用时,把reqId放到request的header中进行传递,然后下游系统获取这个id就可以了。比如下方的拦截器:我们在上文说过,MDC的本质是ThreadLocal,它会把数据都绑定到当前线程上。但是当我们使用多线程的时候,就会带来一个数据丢失的问题。所以,我们需要进行线程间的数据传递,保证MDC数据不丢失。以线程池传递数据为例,ThreadPoolTaskExecutor提供了一个taskDecorator装饰器,通过这个属性,我们就可以实现属性的传递。首先,定义一个MDCContextDecorator,然后设置线程池的taskDecorator属性,关于“如何使用MDC快速查询应用接口全部执行日志”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: vue标签怎么生成

这篇文章主要讲解了“vue标签怎么生成”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue标签怎么生成”吧!1.首先,在vue-cli中创建一个vue.js项目;2.vue.js项目创建好后,在项目中添加一个b…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/06 14:37
Next 03/06 14:37

相关推荐