Logback格式简记

一、常见转换符

时间与日期

  • %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 源码,可以查看到默认的日志格式

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

%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

<?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 中指定日志如下

logging:
  #config: classpath:logback-temp.xml
  config: file:logback-temp.xml

三、参考致谢

Chapter 3: Configuration

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值