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

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

关于转义符的描述

转换符

描述

c

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

C

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

d

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

F

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

l

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

L

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

m

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

M

输出调用者所在的方法名

n

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

p

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

r

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

t

输出所在线程的名字

x

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

X

输出与生成的日志事件的线程关联的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>

最新文章

  1. QT5.3无法自动调用incomingConnection函数的问题(4.7没有这个问题)
  2. regsvr32提示模块加载失败 请确保二进制
  3. tcpclient 类
  4. 数据分析基础之Linalg的使用
  5. java中“==”号的运用
  6. 从程序员的角度设计一个Java的神经网络
  7. [Leetcode]724. Find Pivot Index
  8. 从0开始的Python学习001快速上手手册
  9. property与x.setter与x.deleter
  10. org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;multipartResolver&#39;: Failed to introspect bean class [org.springframework.web.multipart.commons.CommonsMultipartR
  11. JSON数据的解析和生成(C++)
  12. 如何提高php应用的性能?
  13. 豆瓣上9分以上的IT书籍-编程技术篇
  14. 【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
  15. 【python】实例-python实现两个字符串中最大的公共子串
  16. 激活函数(relu,prelu,elu,+BN)对比on cifar10
  17. 谁能告诉delphi7 的updatebatch使用属性说明?
  18. 爬取千万淘宝商品的python脚本
  19. thinkPHP5配置nginx环境无法打开(require(): open_basedir restriction in effect. File(/mnt/hgfs/root/tp5/thinkphp/start.php) is not within the allowed path(s)
  20. C/C++下scanf的%匹配以及过滤字符串问题

热门文章

  1. Facebook广告API系列 2 - Audience Management
  2. LaTex: Undefined citation warnings 解决方法
  3. WPF基础学习笔记整理 (一)
  4. python 判断一个数字是否为3的幂
  5. Java Selenium 笔记
  6. jsjl_for_ubuntu12.04
  7. Beta冲刺
  8. Linux环境下 RabbitMQ 的下载与安装
  9. English trip -- VC(情景课) 7 B Clothing 服装
  10. 12月12日 has_many through:的interference, option