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>

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. 操作系统 - Linux操作系统 - Centos - Centos7 - 安装|命令|使用汇总

    镜像: http://mirrors.aliyun.com/centos/7/isos/x86_64/http://archive.kernel.org 网络配置 - DHCP  # /etc/res ...

  2. 【Qt开发】设置Qt应用程序图标

    [Qt开发]设置Qt应用程序图标 标签:[Qt开发] 首先,准备一个图标,例如:zx.ico,并新建一个文本文档,在里面添加一行: IDI_ICON1 ICON DISCARDABLE"zx ...

  3. kafka学习(二)

    创建kafka生产者 要往kafka写入消息,首先要创建一个生产者对象,并设置一些熟悉.kafka生产者有3个必选的属性.   1.bootstrap.servers 该属性指定broker的地址清单 ...

  4. python 并发编程 多进程 队列目录

    python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...

  5. hdu-4738.Caocao's Bridges(图中权值最小的桥)

    Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 使用redis+flask维护动态代理池

    在进行网络爬虫时,会经常有封ip的现象.可以使用代理池来进行代理ip的处理. 代理池的要求:多站抓取,异步检测.定时筛选,持续更新.提供接口,易于提取. 代理池架构:获取器,过滤器,代理队列,定时检测 ...

  7. E - 盒子游戏

    有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看哪个盒子里的球的数目比较少,然后 ...

  8. docker容器配置hosts

    在mac开发的时候,docker容器没有配置hosts,但是mac本机配置了hosts,这个本机的hosts配置对docker容器里面的所有容器都适用,但是到了linux的时候反而不适用了 可以通过下 ...

  9. 解决stanfordnlp一直运行不报错也没有结果

    最近学习stanfordnlp,当运行程序时,发现程序一直没有反应,上网查询说是内存不够,但是本地电脑是8g内存.后来重新下载了所需文件,问题解决.

  10. 前端开发HTML&css入门——HTML

    HTML究竟为何物?其实HTML就是一种标记语言,英文全称为Hypertext Markup Language,翻译过来就叫超文本标记语言.它的作用就是负责负责网页的三个要素之中的结构. HTML使用 ...