言成言成啊 | Kit Chen's Blog

Logback格式简记

发布于2024-07-11 23:38:33,更新于2024-07-12 02:00:55,标签:java  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

一、常见转换符

时间与日期

  • %d{pattern}:输出当前日期和时间。例如,%d{yyyy-MM-dd HH:mm:ss.SSS} 会输出 2024-07-11 15:34:55.123

日志级别

  • %level%p:输出日志级别,如 INFO, DEBUG, WARN, ERROR

日志信息

  • %msg%m:输出日志消息内容。
  • %C%class :输出类的全限定名。
  • %M%method:输出方法名。
  • %L%line:输出日志的代码所在行号。
  • %F%file:输出日志的代码所在文件名。如 Test.java

线程信息

  • %thread%t:输出产生日志的线程名称。

日志记录器

  • %logger{length}%c{length}:输出日志记录器的名称,可以指定长度。例如 %logger{3},如果记录器的全名小于或等于指定的长度(这里是 3),则完整显示。如果超过指定长度,Logback 会从左到右缩短包名,直到整个名称的长度不超过指定值或无法进一步缩短。

进程信息

  • ${PID}:输出当前进程的 ID。需要代码层面 System.setProperty("PID")

其他

  • %n:输出一个换行符。
  • %r:输出自应用启动到记录该日志事件所用的毫秒数。
  • %property{key}:输出配置文件中的属性。如 %property{os.name}%property{user.dir}
  • %ex%exception:即使不配置也默认开启的。输出异常及其堆栈信息。 %ex{5} 表示堆栈信息最大只输出5行
  • %nopex:不输出异常。
  • %caller:输出调用者信息,包括类名、方法名、文件名和行号。如 at top.meethigher.step1.Step1.main(Step1.java:28)

正则替换

  • %replace(pattern){regex, replacement}:例如 %replace(%msg){'password=\w+', 'password=*****'}

二、示例格式

常用格式

跟踪 org.springframework.boot.logging.logback.DefaultLogbackConfiguration 源码,可以查看到默认的日志格式

我自己常用的日志格式如下

1
%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}

解析

  1. %d{yyyy-MM-dd HH:mm:ss.SSS}

    • 含义:日期和时间
    • 格式:年-月-日 时:分:秒.毫秒
    • 示例:2023-07-12 14:30:15.123
  2. %5p

    • 含义:日志级别,右对齐,宽度为5个字符
    • 可能的值:ERROR, WARN, INFO, DEBUG, TRACE
    • 示例:INFO
  3. ${PID}

    • 含义:进程ID
    • 示例:System.setProperty("PID","111")
  4. [%15.15t]

    • 含义:线程名,右对齐,最小和最大宽度为15个字符
    • 示例:[ main]
  5. %-40.40logger{39}

    • 含义:记录器名称,左对齐,最小和最大宽度为40个字符。表示字段的最小和最大宽度均为40个字符。如果实际内容不足40个字符,会在右侧填充空格;如果超过40个字符,会截断显示。
    • {39} 表示如果名称超过39个字符,将进行缩写
    • 示例:com.example.MyClass
  6. %msg

    • 含义:日志消息内容
    • 示例:Application started successfully
  7. %n

    • 含义:换行符
  8. %ex{5}

    • 含义:异常堆栈跟踪,限制为5行

配置文件

提取出一套适用于自己的 logback.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="UTF-8"?>
<!-- 参考自 https://logback.qos.ch/manual/configuration.html -->
<!-- 开启日志自动更新 -->
<configuration scan="true" scanPeriod="5 seconds">

<!-- spring官方提供的日志渲染工具 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

<!-- 可以读取spring中配置 -->
<!-- <springProperty scope="context" name="test" source="proxy.name"/>-->
<!-- <property name="LOG_HOME" value="${test}"/>-->
<!-- 可以读取System.getProperty -->
<!-- <property name="LOG_HOME" value="${PID}"/>-->
<!-- 可以写死数据 -->
<property name="LOG_HOME" value="logs"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<!-- spring默认日志格式 -->
<pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx</pattern>
<!-- 自定义简洁格式 -->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} -&#45;&#45; [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern>-->
<charset>utf-8</charset>
</encoder>
</appender>

<!--文件归档-->
<appender name="ARCHIVE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/latest.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd,aux}/%d{yyyy-MM-dd-HH}.log</fileNamePattern>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID} --- [%15.15t] %-40.40logger{39} : %msg%n%ex{5}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>

<!-- 减少部分日志 -->
<!-- 业务日志 -->
<!-- 此处配置优先级高于root -->
<logger name="top.meethigher.snipurl.utils.GlobalDecorator" level="DEBUG"/>
<logger name="org.hibernate" level="WARN"/>

<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ARCHIVE"/>
</root>
</configuration>

spring 中指定日志如下

1
2
3
logging:
#config: classpath:logback-temp.xml
config: file:logback-temp.xml

三、参考致谢

Chapter 3: Configuration

发布:2024-07-11 23:38:33
修改:2024-07-12 02:00:55
链接:https://meethigher.top/blog/2024/logback-pattern/
标签:java 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏