MDC是什么?

第一次接触MDC,很蒙圈。看看导入的包import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.slf4j.MDC;它显然和日志管理有关。

slf4j常用的日志接口有哪些?trace、debug、info、warn、error,再加上MDC.

最常见的日志管理会采用这种方式:

private static final Logger log = LoggerFactory.getLogger(类名.class);

log.info();

log.debug();

log.trace();

MDC.put()方法提供了日志输出功能,通过log4j2.xml的layout配置%X{ }即可获得日志,这种方式非常灵活,

允许用户对任何对象进行日志管理。

怎么为应用配置日志管理

日志的输出格式:
        <property name="PATTERN">
            %X{logId},[%-5level],%d{yyyy-MM-dd HH:mm:ss.SSS},%t,%c{1}: %msg%n
        </property>
       解析:

  1. %X{logId}----针对MDC.put("", "")方法。
  2. [%-5level]----日志的级别
  3. %d{yyyy-MM-dd HH:mm:ss.SSS}-----时间格式化
  4. %t ----- 线程
  5. %c{1} --- 类名
  6. %msg --- 消息
  7. %n ------换行

看配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
  3. <configuration>
  4. <properties>
  5. <!-- 文件输出格式 -->
  6. <property name="PATTERN">
  7. %X{logId},[%-5level],%d{yyyy-MM-dd HH:mm:ss.SSS},%t,%c{1}: %msg%n
  8. </property>
  9.  
  10. <!-- 日志根路径 -->
  11. <property name="BASE_PATH">
  12. /applog/xxxlog
  13. </property>
  14.  
  15. <!-- 应用名 -->
  16. <property name="APP_NAME">
  17. xxx-core
  18. </property>
  19.  
  20. <!-- 日志文件名 -->
  21. <property name="LOG_FILE_NAME">
  22. ${BASE_PATH}/${APP_NAME}.log
  23. </property>
  24.  
  25. <!-- 滚动日志文件生成规则 -->
  26. <property name="LOG_FILE_PATTERN">
  27. ${BASE_PATH}/${APP_NAME}_%d{yyyyMMddHHmm}-%i.log
  28. </property>
  29. </properties>
  30.  
  31. <!-- xx报文日志级别 -->
  32. <DynamicThresholdFilter key="traceOpen" defaultThreshold="ERROR" onMatch="ACCEPT"
  33. onMismatch="NEUTRAL">
  34. <KeyValuePair key="yes" value="trace" />
  35. </DynamicThresholdFilter>
  36.  
  37. <!-- 日志输出定义 -->
  38. <appenders>
  39. <!-- 滚动日志 -->
  40. <RollingFile name="rollingFileLog" filename="${LOG_FILE_NAME}" filePattern="${LOG_FILE_PATTERN}"
  41. append="true">
  42. <Filters>
  43. 过滤掉不符合日志级别的日志
  44. <!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> -->
  45. 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
  46. <!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> -->
  47. </Filters>
  48. 输出日志的格式
  49. <PatternLayout pattern="${PATTERN}" />
  50. <Policies>
  51. <TimeBasedTriggeringPolicy />
  52. <SizeBasedTriggeringPolicy size="20 MB" />
  53. </Policies>
  54. 滚动日志的策略
  55. <DefaultRolloverStrategy max="50">
  56. <Delete basePath="${BASE_PATH}/" maxDepth="2">
  57. <IfFileName glob="${APP_NAME}_*.log" />
  58. <!--! 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
  59. 另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
  60. <!--7天-->
  61. <IfLastModified age="7d" />
  62. <IfAny>
  63. <IfAccumulatedFileSize exceeds="2 GB" />
  64. <IfAccumulatedFileCount exceeds="100" />
  65. </IfAny>
  66. </Delete>
  67. </DefaultRolloverStrategy>
  68. </RollingFile>
  69. <!-- 控制台 -->
  70. <Console name="console" target="SYSTEM_OUT">
  71. <PatternLayout pattern="${PATTERN}" />
  72. </Console>
  73. </appenders>
  74.  
  75. <!-- 日志对象定义 -->
  76. <loggers>
  77. <!-- xx日志 -->
  78. <logger name="CoreframeInteractiveLogger" level="info" additivity="true">
  79. <AppenderRef ref="interactiveAppender" />
  80. </logger>
  81.  
  82. <!-- xx日志 -->
  83. <logger name="CoreframeServiceMetricsLogger" level="info" additivity="true">
  84. <AppenderRef ref="serviceMetricsAppender" />
  85. </logger>
  86.  
  87. <!-- 服务框架 -->
  88. <logger name="coreframe" level="info" />
  89.  
  90. <!-- 应用处理日志 -->
  91. <logger name="Service" level="debug" />
  92. <logger name="" level="debug" />
  93.  
  94. <!-- 测试日志 -->
  95. <logger name="test" level="trace" />
  96. <logger name="" level="trace" />
  97.  
  98. <root level="info">
  99. <AppenderRef ref="console" />
  100. <AppenderRef ref="rollingFileLog" />
  101. </root>
  102. </loggers>
  103.  
  104. </configuration>

MDC到日志管理配置的更多相关文章

  1. Springboot 日志管理配置logback-spring.xml

    几种常见的日志 Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用: Log4j2:apach旗下的关于log4j的升级版: Logback:是基于slf4j接 ...

  2. spring boot日志管理配置

    spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,Log4J2和Logback.每种L ...

  3. nginx 日志管理配置详解

    nginx的日志管理 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$statu ...

  4. Nginx日志管理配置

    1.创建日志目录 nginx 的默认日志目录所在硬盘空间可能比较小,所以根据硬盘的空间状况创建日志目录 例如:mkdir /backup/nginx_logs 2.修改nginx配置文件 配置 ngi ...

  5. springboot日志管理+集成log4j

    sprongboot使用的默认日志框架是Logback. 可以在application.properties配置简单日志属性,也可以单独配置logback.xml格式,还可以使用log4j来管理. 下 ...

  6. commons-logging和Log4j 日志管理/log4j.properties配置详解

    commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...

  7. 【Nginx系列】Nginx虚拟主机的配置核日志管理

    Nginx配置段 #user nobody; worker_processes 1;// 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数 #error_lo ...

  8. Spring MVC 中使用AOP 进行统一日志管理--XML配置实现

    1.介绍 上一篇博客写了使用AOP进行统一日志管理的注解版实现,今天写一下使用XML配置实现版本,与上篇不同的是上次我们记录的Controller层日志,这次我们记录的是Service层的日志.使用的 ...

  9. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

随机推荐

  1. 封装一个windows转发端口的脚本

    使用方法: 1.打开文本编辑工具如(Notepad++) 2.新建文件 3.注意:修改文本的编码字符集为:gb2312 4.将下面代码 复制入文件 5.保存文件名为:transmit.bat 6.双击 ...

  2. Android:adb命令详解

    什么是adb adb工具即Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互

  3. cocos2dx基础篇(9) 滑块控件CCControlSlider

    [3.x] (1)去掉 “CC” (2)对象类 CCObject 改为 Ref (3)CCControlEvent 改为强枚举 Control::EventType (4)CCControlEvent ...

  4. Java基础之 多线程

    一.创建多线程程序的第一种方式: 继承(extends) Thread类 Thread类的子类: MyThread //1.创建一个Thread类的子类 public class MyThread e ...

  5. 【Qt开发】QT样式表单 qss的样式优化

    QT样式表单 QT的样式表单允许我们在对程序不做任何代码上的更改的情况下轻松改变应用程序的外观. 其思想来源于网页设计中的CSS,即可以将功能设计和美学设计分开. 它的语法和概念和HTML CSS也是 ...

  6. Canvas入门03-绘制弧线和圆

    绘制弧线的API: context.arc(centerx:number, centery: number, radius: number, startAngle: number, endAngle: ...

  7. docker--docker 网络管理

    9 docker 网络管理 9.1 默认网络 1.查看docker网络: docker network ls Docker中默认的三种网络分别为bridge.host和none,其中名为bridge的 ...

  8. get与post请求的区别 (面试会问)

    get和post请求是HTTP与服务器交互方式,也就是通常所说的风别对服务器资源的增删改查 1. post是修改数据   get是获得数据 GET在浏览器回退时是无害的,而POST会再次提交请求.(面 ...

  9. [转帖]深入理解 MySQL—锁、事务与并发控制

    深入理解 MySQL—锁.事务与并发控制 http://www.itpub.net/2019/04/28/1723/ 跟oracle也类似 其实所有的数据库都有相同的机制.. 学习了机制才能够更好的工 ...

  10. GmSSL Build with VS2017

    使用背景: 最近研究GB35114, 有关于sip协议部分,exosip的已经编译过,由于gb3511中采用的是国密算法,因此这里记录一下GMSSL在windows下的编译过程以及遇到的错误 详细GM ...