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 ------换行

看配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<!-- status="OFF",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF -->
<configuration>
<properties>
<!-- 文件输出格式 -->
<property name="PATTERN">
%X{logId},[%-5level],%d{yyyy-MM-dd HH:mm:ss.SSS},%t,%c{1}: %msg%n
</property> <!-- 日志根路径 -->
<property name="BASE_PATH">
/applog/xxxlog
</property> <!-- 应用名 -->
<property name="APP_NAME">
xxx-core
</property> <!-- 日志文件名 -->
<property name="LOG_FILE_NAME">
${BASE_PATH}/${APP_NAME}.log
</property> <!-- 滚动日志文件生成规则 -->
<property name="LOG_FILE_PATTERN">
${BASE_PATH}/${APP_NAME}_%d{yyyyMMddHHmm}-%i.log
</property>
</properties> <!-- xx报文日志级别 -->
<DynamicThresholdFilter key="traceOpen" defaultThreshold="ERROR" onMatch="ACCEPT"
onMismatch="NEUTRAL">
<KeyValuePair key="yes" value="trace" />
</DynamicThresholdFilter> <!-- 日志输出定义 -->
<appenders>
<!-- 滚动日志 -->
<RollingFile name="rollingFileLog" filename="${LOG_FILE_NAME}" filePattern="${LOG_FILE_PATTERN}"
append="true">
<Filters>
过滤掉不符合日志级别的日志
<!-- <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" /> -->
只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
<!-- <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> -->
</Filters>
输出日志的格式
<PatternLayout pattern="${PATTERN}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="20 MB" />
</Policies>
滚动日志的策略
<DefaultRolloverStrategy max="50">
<Delete basePath="${BASE_PATH}/" maxDepth="2">
<IfFileName glob="${APP_NAME}_*.log" />
<!--! 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用
另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->
<!--7天-->
<IfLastModified age="7d" />
<IfAny>
<IfAccumulatedFileSize exceeds="2 GB" />
<IfAccumulatedFileCount exceeds="100" />
</IfAny>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<!-- 控制台 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}" />
</Console>
</appenders> <!-- 日志对象定义 -->
<loggers>
<!-- xx日志 -->
<logger name="CoreframeInteractiveLogger" level="info" additivity="true">
<AppenderRef ref="interactiveAppender" />
</logger> <!-- xx日志 -->
<logger name="CoreframeServiceMetricsLogger" level="info" additivity="true">
<AppenderRef ref="serviceMetricsAppender" />
</logger> <!-- 服务框架 -->
<logger name="coreframe" level="info" /> <!-- 应用处理日志 -->
<logger name="Service" level="debug" />
<logger name="" level="debug" /> <!-- 测试日志 -->
<logger name="test" level="trace" />
<logger name="" level="trace" /> <root level="info">
<AppenderRef ref="console" />
<AppenderRef ref="rollingFileLog" />
</root>
</loggers> </configuration>

最新文章

  1. java语言的I/O操作预习
  2. JS搞基指南----延迟对象入门提高资料整理
  3. commonJS — 函数操作(for Function)
  4. tomcat 启动时内存溢出
  5. dwr与ssh框架整合教程
  6. 微信jssdk uploadImage 巨坑
  7. 1032 - Intersecting Dates
  8. C++服务器设计(六):设备连接的生命周期管理
  9. c语言15行实现简易cat命令
  10. 在Windows下通过压缩包方式安装MySQL
  11. Spring boot+ logback环境下,日志存放路径未定义的问题
  12. Flume配置Multiplexing Channel Selector
  13. &lt;TCP/IP&gt;Internet地址结构回顾
  14. 雷林鹏分享:C# 循环
  15. 关于ros将opencv版本固定“写死”的一些想法
  16. Vs2013 如何使用EF6来连接mysql数据库
  17. CAC的Debian-8-64bit安装BBR正确打开方式
  18. 自定义泛型_无多态_通配符无泛型数组_jdk7泛型使用
  19. maven打包 springBoot 工程时,默认识别resources目录,习惯使用 resource 目录的需要手动指定静态资源目录
  20. AtCoder Grand Contest 004

热门文章

  1. Linux安装MySql5.7及配置(yum安装)
  2. 为终端配置proxy
  3. Python子类调用父类内属性的方法
  4. robot framework python3环境下学习笔记(1)——安装robot framework
  5. python+ selenium&amp;APPium自动化 page Object 设计模式
  6. ElasticSearch入门 —— 集群搭建
  7. mysql5.6修改密码并授权所有远程用户可登陆
  8. Django REST framework JWT学习
  9. FacertGrid()的使用
  10. ConfigurationManager.ConnectionStrings 属性