本文只对项目中用到的几个常用表达式作说明,完整的说明可以查阅官网:LogBack日志打印格式官方文档。
格式说明
%level 【日志级别】
有三种等价格式:%p = %le = %level
打印日志的级别,比如DEBUG、INFO、WARN、ERROR。
表达式可以写成$-5level
:”-“号表示左对齐,-5表示从左显示5个字符宽度,如果字符小于5个,则后面用空格填充。
%d 【时间】
有两种等价的表达式:%d = %data
按照指定格式打印出日期和时间信息。
%thread 【线程名】
有两种等价的表达式:%t = %thread
打印当前的线程名。相当于Thread.currentThread().getName()
的信息。
%msg 【日志正文信息】
有三种等价的表达式:%m = %msg = %message
打印日志正文文本。
%n 【换行符】
%n换行的效果和Linux中的\n
或Windows中的\r\n
效果一样 在日志中起到换行的效果。
%logger 【日志名字】
有三种等价的表达式:%logger = %lo = %c
可以理解为LoggerFactory.getClass()中传的参数名。一般为日志所在类名,也可以指定name。
可以通过%logger{长度}
来指定打印的最大长度,官方文档上的示例:
本地我试着把%logger{10}给成10,效果是这样
几个关键点:
- %logger默认不给长度,显示所有。
- 日志名字最右边的名字永远不会被缩写,不管你给的长度是不是小于最右边的长度。
- 其他部分,最少被缩短到一个字符,但不会被完全删除。
%C 【类名】
有两种等价的表达式:%C = %class
打印出全类名,但是效率不是特别快,不建议生产中使用。
%M 【方法名】
有两种等价的表达式:%M = %method
打印日志请求发出的方法的方法名。和打印出类名信息一样,不推荐使用。
%F 【文件名】
有两种等价的表达式:%F = %file
打印日志请求的java源文件名字。和打印出类名信息一样,不推荐使用。
%L 【行号】
有两种等价的表达式:%L = %line
打印日志请求在java文件中的行号。和打印出类名信息一样,不推荐使用。
%r 【运行毫秒数】
两种等价表达式:%r = %relative
从程序运行到本条日志打印出来的毫秒数。
注意事项
- 在pattern中括号”()”有特殊含义,如:
%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
,可以用来表示一个group,然后对这个group设定格式,所以要使用括号的时候需要用反斜杠\
转义,如:%date %-5level [%thread] %logger{43}\(%L\) : %msg
。 - 如果在日志中要输出“%”,则必须用“\”对“\%”进行转义。
示例
例如在LogBack的配置文件中设置日志格式如下1
<pattern>%relative [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{25} | %class.%method \(%file:%line\) - %msg%n</pattern>
实际打印的效果