logback转义符与MDC

关于MDC的使用,可以结合filter一块使用,将需要串联的上下文的关键信息,通过header进行传递,然后通过配置%X{userId}将信息打印出来。

MDC.put("userId", userId);
httpResponse.setHeader("userId", userId);

 

关于转义符的描述

转换符    

 描述

调用日志事件的所在记录器的名字,如一个logger的名字是my.test.bbb.ccc,调用的是WARN级别的日志输出,那么输出的是输出my.test.bbb.ccc,可以在其右边指定了精度,如%c{2}那么输出的是bbb.ccc

调用日志事件的所在的类名,和c转换符一样,可以在右边指定宽度,如%C{2}输出%C{2}

日志调用所发生的时间,日期格式在其后跟着的大括号内的格式指定如%d{yyyy-MM-dd HH:mm:ss},我现在输出的结果是2011-07-11 21:05:22,推荐使用的是log4j本身提供的日期格式,如%d{ISO8601},%d{ABSOLUTE},%d{DATE}

所处所在文件名,如上面说C转换符的例子,输出结果是LayoutTest.java

是的日志事件发生的位置信息,这个和虚拟机的实现有点关系,一般境况下能得到类,方法,行数源文件等信息,

只是输出触发日志事件代码所在的行号,性能损耗会小很多。

显示应用给日志提供的其他信息,如消息。logger.warn("Message 2");那么%m将得到的是Message 2

输出调用者所在的方法名

换行,和\r \r\n有相同功能,能识别系统的换行符,自动转换成\r或者\r\n,log4j推荐使用这个转换符,而不是\r或者\r\n

输出调用的日志的级别,如我是调用logger.debug方法,那么级别就是debug

输出自应用启动后第一次调用logger的日志输出方法,到输出该log信息耗费的毫秒数

输出所在线程的名字

输出产生的日志事件的线程的NDC(嵌套诊断上下文)

输出与生成的日志事件的线程关联的MDC(映射诊断上下文)。X转换符括号之间放置了一个key,就像在%X {clientNumber}中的clientNumberkey 一样。在MDC correspondingvalue将被输出。

写上%%后将直接输出一个%符号

 

 

关于Logback配置中支持if添加语句,之所以使用该方式,是因为在工作过程中,需要判断生产环境不让日志打印在catalina文件中,因此通过if条件语句判断操作系统来实现

需要引入jar

<dependency>
       <groupId>org.codehaus.janino</groupId>
       <artifactId>janino</artifactId>
       <version>${janino.version}</version>
 </dependency>

 

<if condition='property("os.name").contains("Win") | property("os.name").contains("Mac")'>
      <then>
            <appender-ref ref="STDOUT"/>
      </then>
</if>

 

posted @ 2019-04-27 19:58  woniu4  阅读(963)  评论(0编辑  收藏  举报