日志记录Logback
Layout描述
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %m%n
%d{yyyy-MM-dd HH:mm:ss.SSS}
:表示该条日志记录的时间%thread
:表示线程名%-5level
:级别从左显示5个字符宽度%logger{50}
:表示该条日志所属类的全名%m
:也可以写作%msg,表示这条日志的内容%n
:表示换行
%logger{length}
、%c{length}
、%lo{length}
:在日志事件的源点输出logger
的名称,比如:
- LoggerFactory.getLogger(TestMain.class),此时%logger的值为“com.xxx.TestMain”
- LoggerFactory.getLogger("FILE-LOGGER"),此时其值为“FILE-LOGGER”
其中{length}为可选项,length值为数字类型(>=0),在不丢失含义的情况下来限定logger名字的长度(缩短);在指定length情况下,将会直接返回“.”字符最右端的子字符串。如下为示例:
配置 | logger名 | 结果 |
---|---|---|
%logger | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
%logger{0} | mainPackage.sub.sample.Bar | Bar |
%logger{5} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{10} | mainPackage.sub.sample.Bar | m.s.s.Bar |
%logger{15} | mainPackage.sub.sample.Bar | m.s.sample.Bar |
%logger{16} | mainPackage.sub.sample.Bar | m.sub.sample.Bar |
%logger{26} | mainPackage.sub.sample.Bar | mainPackage.sub.sample.Bar |
由此可见,无论length如何设置,“Bar” 总会完整输出;当length过小时,将会根据“.”分割且只输出缩写;根据length的情况,从最右端开始逐级补全。为了易读,我们尽可能使用%logger输出全名。
%C{length}
、%class{length}
:输出发生日志事件的调用类的全限定名。与%logger
类似,{length}可选项来限定类名的长度,适度进行缩写。%d{pattern}
、%date{pattern}
、%d{pattern,timezone}
、%date{pattern,timezone}
:输出日志事件的时间;{pattern}为可选项,用于声明时间的格式,比如%d{yyyy-MM-dd HH:mm:ss},pattern必须为“java.text.SimpleDateFormat”类可兼容的格式。%F
、%file
:输出发生日志请求的java源文件名,产生文件名信息不是特别的快,有一定的性能损耗,除非对执行速度不敏感否则应该避免使用此选项。(比如输出:TestMain.java,默认异常栈中会输出类名)%caller{depth}
、%caller{depthStart..depthEnd}
:输出产生日志事件的调用者位置信息,{depth}为可选项;位置信息依赖于JVM实现,不过通常会包含调用方法的全限定名、文件名和行号。假如:TestMain.java中main()-->test1()-->test2(),在test2方法中触发日志事件,假如%caller{3}将会输出:
- Caller+0 at com.test.demo.TestMain2.test2(TestMain2.java:26)
- Caller+1 at com.test.demo.TestMain2.test1(TestMain2.java:18)
- Caller+2 at com.test.demo.TestMain2.main(TestMain2.java:14) 这个配置项,对我们排查问题非常有用。不过在exception时,异常栈中已经包含了全部的追踪栈。
%L
、%line
:输出发生日志请求的源文件行号,产生行号信息不是非常的快速,有一定的性能损耗,除非对执行速度不敏感否则应该避免使用此选项。(默认异常栈中会输出行号)%m
、%msg
、%message
:在日志中输出应用提供的message。比如:LOGGER.error("message",exception),输出“message”和exception栈。%M
、%method
:输出发出日志记录请求的方法名称,产生方法名不是特别快速。%n
:输出一个行分隔符,即换行符。(取决于运行平台,可能是“\n”,"\r\n")%p
、%le
、%level
:输出日志事件的level。%t
、%thread
:输出产生日志事件的线程名称。%ex{depth}
、%exception{depth}
:输出日志事件相关的异常栈,默认会输出异常的全跟踪栈。(%m会包含此部分)%nopex
:输出日志数据,但是忽略exception
。