首页 > 作文

使用MDC实现日志链路跟踪

更新时间:2023-04-04 15:40:56 阅读: 评论:0

目录
1.原理2.实现3.过滤器4.logback.xml5.返回体6.效果日志

前言:

在微服务环境中,我们经常使用skywalking、cat等去实现整体请求链路的追踪,但是这个整体运维成本高,架构复杂,我们来使用mdc通过log来实现一个轻量级的会话事务跟踪功能。

1.原理

mdc org.sl4j.mdc其实内部就是threadlocal,mdc提供了put/get/clear等几个核心接口,用于操作threadlocal中的数据;threadlocal中的k-v,可以在logback.xml中声明,最终将会打印在日志中。

// java代码mdc.put("urid","laker"); // logback.xml%x{urid}

例如:

<property name="pattern" value="%d{hh:mm:ss.sss} [%thread] %-5level [%x{urid}] %logger{20} - %msg%n"/>

2.实现

整体流程如下:

用户登录系统,我们日志中记录urid:laker。用户发起请求,一个请求中可能实际产生多个http请求,这里可以前端生成一个requestid在返回体中,返回requestid。研发运维人员,可以根据 uridrequestid去日志中捞请求链路。

3.过滤器

@order(value = ordered.highest_precedence + 100)@component@webfilter(filtername = "mdcfilter", urlpatterns = "/*")public class mdcfilter extends onceperrequestfilter {  @override  protected void dofilterinternal(httprvletrequest httprvletrequest, httprvletrespon httprvletrespon, filterchain filterchain) throws rvletexception, ioexception {    try {      mdc.put("urid", "laker");      mdc.put("requestid", idutil.fastuuid());    } catch (exception e) {      //    }    try {      filterchain.dofilter(httprvletrequest, httprvletrespon);    } finally {      mdc.clear();    }  }}

4.logback.xml

<?xml version="1.0" encoding="utf-8"?><configuration>  <property name="log_home" value="logs"/>  <property name="encoding" value="utf-8"/>  <appender name="default" class="ch.qos.logback.core.rolling.rollingfileappender">    <file>${lo树作文g_home}/test.log</file>    <append>true</append>    <prudent>fal</prudent>    <encoder class="ch.qos.logback.classic.encoder.patternlayoutencoder">      <pattern>%d{yyyy-mm-dd hh:mm:ss.sss} [%t] %-5level %logger{50} %line - %m%n</pattern>    </encoder>    <!-- 按天回滚 daily -->    <rollingpolicy class="ch.qos.logback.core.rolling.timebadrollingpolicy">      <!--归档日志文件名-->      <filenamepattern>${log_home}/test.log.%d{yyyy-mm-dd}</filenamepattern>      <!-- 最多保存15天历史文件 -->      <maxhistory>15</maxhistory>    </rollingpolicy>  </appender>  <!-- 日志输出格式 -->  <property name="log.pattern"       value="%d{hh:mm:ss.sss} [%thread] %-5level [%x{urid}|%x{requestid}] %logger{20} - [%method,%line] - %msg%n"/>  <!-- 控制台输出 -->  <appender name="console" cla神奇宝贝剧场版比克提尼与黑英雄捷克罗姆ss="ch.qos.logback.core.consoleappender">    <encoder>      <pattern>${log.pattern}</pattern>    </encoder>  </appender>  <appender name="stdout" class="ch.qos.logback.core.consoleappender">    <encoder class="ch.qos.logback.classic.encoder.patternlayoutencoder">      <pattern>%d{yyyy-mm-dd hh:mm:ss.sss} [%t] %-5level %logger{50} %line - %m%n</pattern>    </encoder>  </appender>  <logger name="com.test.demo" level="debug">    <appender-ref ref="default"/>  </logger>  <!-- 日志输出级别 --> 过期的情书歌词 <root level="info">    <appender-ref ref="default"/>    <appender-ref ref="console"/>  </我的乐园 四年级下册root></configuration>

5.返回体

public class respon<t> {  @apimodelproperty(notes = "响应码,非200 即为异常", example = "200")  private final int code;  @apimodelproperty(notes = "响应消息", example = "提交成功")  private final string msg;  @apimodelproperty(notes = "响应数据")  private final t data;  @apimodelproperty(notes = "请求id")  private final string requestid;  public respon(int code, string msg, t data) {    this.code = code;    this.msg = msg;    this.data = data;    this.requestid = mdc.get("requestid");  }

6.效果日志

响应:

{ code: 200, msg: "", requestid: "74a269a8-3cb4-417e-853c-b968b77cce23"}

日志:

18:37:15.997 [http-nio-8080-exec-1] info [laker|90717490-5ef4-4e46首当其冲-bc2c-605952fc3803] c.l.m.c.infocontroller - [v2map,17] - null18:37:38.980 [http-nio-8080-exec-2] info [laker|82bde351-f86e-466f-97a0-c857a0c4c1c9] c.l.m.c.infocontroller - [v2map,17] - null18:37:39.992 [http-nio-8080-exec-3] info [laker|74a269a8-3cb4-417e-853c-b968b77cce23] c.l.m

到此这篇关于使用mdc实现日志链路跟踪的文章就介绍到这了,更多相关mdc实现日志链路跟踪内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 15:40:53,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d5caaeae5c80a7a94c7ec053cb3ed3ca.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:使用MDC实现日志链路跟踪.doc

本文 PDF 下载地址:使用MDC实现日志链路跟踪.pdf

标签:日志   链路   过滤器   捷克
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图