商略网络,专注中小企业网站建设,为您的网站量身定制!
您当前的位置:首页 > 动态 > 建站知识

佛山网站制作公司:Java后端网站设计

商略建站发表于 : 2019-07-14 16:29:15  来源:  分类:建站知识

  • 摘要:MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器。Logback设计的一个目标之一是对分布式应用系统的审计和调试。在现在的分布式系统中,需要同时处

MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器。


Logback设计的一个目标之一是对分布式应用系统的审计和调试。在现在的分布式系统中,需要同时处理很多的请求。如何来很好的区分日志到底是那个请求输出的呢?佛山网站制作公司我们可以为每一个请求生一个logger,但是这样子最产生大量的资源浪费,并且随着请求的增多这种方式会将服务器资源消耗殆尽,所以这种方式并不推荐。

佛山网站制作公司


一种更加轻量级的实现是使用MDC机制,在处理请求前将请求的唯一标示放到MDC容器中如sessionId,这个唯一标示会随着日志一起输出,以此来区分该条日志是属于那个请求的。并在请求处理完成之后清除MDC容器。


佛山网站制作公司下面是MDC对外提供的方法,也可以通过MDC javadocs查看所有方法。


Example 7.1: Basic MDC usage ( logback-examples/src/main/java/chapters/mdc/SimpleMDC.java)


Logback配置:


输出日志:

    在日志模板logback.xml 中,使用 %X{ }来占位,替换到对应的 MDC 中 key 的值。同样,logback.xml配置文件支持了多种格式的日志输出,比如%highlight、%d等等,这些标志,在PatternLayout.java中维护。


    MDC的容器中的key可以多次赋值,最后一次的赋值会覆盖上一次的值。


PatternLayout :


Notes:日志模板配置,使用 %为前缀让解析器识别特殊输出模式,然后以{}后缀结尾,内部指定相应的参数设置。


在处理请求前将请求的唯一标示放到MDC容器中如sessionId,这个唯一标示会随着日志一起输出,以此来区分该条日志是属于那个请求的。这个我们可以使用Advanced来实现,可以使用filter,interceptor等。

佛山网站制作公司


佛山网站制作公司可以参考篇文章Logback 快速定位用户在一次请求中的所有日志。


这是Logback提供的一个filter,他会将一些请求信息放到MDC容器中,这个filter最好放到配置编码的filter之后。以下是详细的key:


| MDC key | MDC value | --|-- | req.remoteHost | as returned by the getRemoteHost() method | | req.xForwardedFor | value of the "X-Forwarded-For" header | | req.method | as returned by getMethod() method | | req.requestURI | as returned by getRequestURI() method | | req.requestURL | as returned by getRequestURL() method | | req.queryString | as returned by getQueryString() method | | req.userAgent | value of the "User-Agent" header |


使用配置:需要保证filter在需要使用的到该MDC的其他filter之前。


通过这段代码,我们可以看到底层最终是使用的是ThreadLocal来做实现。


本文由商略网络整理编辑:佛山网站制作公司:Java后端网站设计
地址为:https://www.3lue.cn/news/jianzhanzhishi/4192.html