LogBack日志打印格式详解

本文只对项目中用到的几个常用表达式作说明,完整的说明可以查阅官网: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
从程序运行到本条日志打印出来的毫秒数。

注意事项

  1. 在pattern中括号”()”有特殊含义,如:%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n,可以用来表示一个group,然后对这个group设定格式,所以要使用括号的时候需要用反斜杠\转义,如:%date %-5level [%thread] %logger{43}\(%L\) : %msg
  2. 如果在日志中要输出“%”,则必须用“\”对“\%”进行转义。

示例

例如在LogBack的配置文件中设置日志格式如下

1
<pattern>%relative [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{25} | %class.%method \(%file:%line\) - %msg%n</pattern>

实际打印的效果

------ 本文完 ------