Logback.xml 详细配置

2,802 阅读3分钟

Logback.xml 详细配置

项目中日志是必不可少的,有了日志方便定位问题,解决问题,SpringBoot项目推荐使用log4j或者logback

一般logback用的稍微多一点,而且也更灵活。

很多时候配置logback,我都是从其他地方找一个xml,然后改一改,随着时间越来越久,很多配置都忘得差不多了,今天就好好总结一下。

logback-spring.xml

首先第一行是

<?xml version="1.0" encoding="UTF-8"?>

这个很简单,声明xml文件和编码格式。

接下来进入正题。

configuration

logback配置都包在一个 <configuration> 标签里。

<configuration scan='true' scanPeriod="60 seconds" debug="false">

  • scan:为true,配置文件发生改变,将会重新加载,默认为true
  • scanPeriod:监测配置文件是否有修改的时间间隔,默认单位是毫秒
  • debug:打印出logback内部日志,默认false

这里面可以声明的有:

  • springProperty
  • property
  • conversionRule
  • appender
  • root
  • logger
  • springProfile

springProperty

可以从application.properties配置文件中,获取属性。

比如这样,

<springProperty scope="context" name="LOG_PATH" source="logging.path"/>

  • scope:作用域
  • name:名称,在下面引用的时候的名字
  • source:在application.properties文件中的key
  • defaultValue:默认值,该属性在application.properties中未设置时,会使用默认值

property

相当于声明变量,指定namevalue,在下面可以用${name}引用value

<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%p] [%.10t] [%c{1}][%L] %X{traceId} %m%n" />

conversionRule

主要用来配置转换器,可以自定义Pattern模板,也可以引入一些其他模板来解析Pattern,比如打印彩色日志,打印IP地址。

打印彩色日志转换器。 <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />

  • conversionWord:在Pattern中的关键字
  • converterClass:转换器类

<property name="COLOR_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%p) %clr(${PID}){magenta} %clr([%.10t]){yellow} %clr([%c{1}]){blue}%clr([%L]){faint}%X{traceId} %m%n"/>

上面%clr就是要用ColorConverter来解析,后面{blue}就是要展示的颜色。

彩色效果:

Pattern表达式

  • %d:输出日志的打印时间,模式语法与java.text.SimpleDateFormat 兼容(d/date)
  • %p:输出日志级别(p / le / level)
  • ${PID}:输出进程Id
  • %.10t:输出产生日志的线程名。(t / thread)
  • %c{1}:输出日志的logger名 (c / lo / logger)
  • %L:输出执行日志请求的行号 (L / line)
  • %X:和当前线程相关联的NDC(嵌套诊断环境) ,追踪Id,MDC用
  • %m:输出应用程序提供的信息,详细日志 (m / msg / message)
  • %n:换行

还有一些其他的不常用的:

  • C / class:输出执行记录请求的调用者的全限定名,和c一样,尽量避免使用 例如:%C{5}
  • contextName / cn:输出上下文名称。
  • F / file:输出执行记录请求的java源文件名。尽量避免使用。
  • caller{depth}:输出生成日志的调用者的位置信息,整数选项表示输出信息深度。例如:%caller{2}
  • M / method:输出执行日志请求的方法名。尽量避免使用。
  • r / relative:输出从程序启动到创建日志记录的时间,单位是毫秒。
  • replace(p ){r, t}:p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。例如: "%replace(%msg){'\s', ''}"

配置caller后

格式符

  • 左对齐修饰符(-):接着是可选的最小宽度修饰符,用十进制数表示。如果字符小于最小宽度,则左填充或右填充,默认是左填充(即右对齐),填充符为空格。如果字符大于最小宽度,字符永远不会被截断。
  • 最大宽度修饰符(.):后面加十进制数。如果字符大于最大宽度,则从前面截断。后面加减号“-”在加数字,表示从尾部截断。

appender

写日志的组件,有两个必要属性nameclassname指定appender名称,可以自定义,class指定appender的全限定名。

控制台打印:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${COLOR_LOG_PATTERN}</pattern>
        <charset>utf-8</charset>
    </encoder>
</appender>
  • pattern:设置打印的格式
  • charset:编码格式

打印到文件

<appender name="xxxx" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH}/xxxx.log</file>
    <encoder>
        <pattern>${LOG_PATTERN1}</pattern>
        <charset>utf-8</charset>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/xxxx.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>
  • ch.qos.logback.core.rolling.RollingFileAppender:滚动记录日志
  • file:写入的日志文件路径、名称,如果文件不存在,则新建
  • encoder:设置编码
    • pattern:日志打印的格式
    • charset:编码格式
  • rollingPolicy:ch.qos.logback.core.rolling.TimeBasedRollingPolicy 设置滚动策略,按照时间来保存
  • fileNamePattern:日志名称格式,如果以gz结尾,会自动压缩。
  • maxHistory:日志保存的最大天数,这个天数之前的日志会被自动删除。

appender中还可以配置ch.qos.logback.classic.net.SMTPAppender,在发生异常时,可以发送邮件, 还有ch.qos.logback.classic.db.DBAppender,可以把日志保存到数据库。

root

<root level="INFO">
    <appender-ref ref="console"/>
    <appender-ref ref="xxxx"/>
</root>
  • root:是所有logger的上级,可以设置日志输出级别。默认是DEBUG。其实它也是一个logger,但是只有level属性。
  • appender-ref:日志被打印到控制台和日志文件中。

logger

<logger name="com.ler.yshi.interceptor.PrintSqlInterceptor" level="logger_dao_level" additivity="false">
    <appender-ref ref="console"/>
    <appender-ref ref="xxxx"/>
    <appender-ref ref="sql"/>
</logger>
  • logger:用来设置某一个包或者具体的某一个类的日志打印级别,
  • name:用来指定受此logger约束的某一个包或者具体的某一个类,com.ler.yshi.interceptor.PrintSqlInterceptor这个类是我打印完整SQL的拦截器。
  • level:日志级别
  • addtivity:是否向上级logger传递打印信息。默认是true
  • appender-ref:
    • logger可以包含零个或多个元素,标识这个appender将会添加到这个logger。这里的意思就是PrintSqlInterceptorSQL日志会被打印到控制台,日志文件,以及SQL日志文件中

springProfile

logback.xml中还可以使用springProfile来为多环境配置不同的日志。

<!-- 开发环境日志级别为DEBUG -->
<springProfile name="dev">
    <root level="DEBUG">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</springProfile>

<!-- 测试环境日志级别为INFO -->
<springProfile name="test">
    <root level="INFO">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</springProfile>

不过这个用的不是很多。

logback知道这些,基本上使用是没什么问题了,还有一些复杂的,其实也没必要搞那么复杂。

好了,最后欢迎大家关注我的公众号,共同学习,一起进步。加油🤣

南诏Blog

参考

blog.csdn.net/snail_bi/ar…
www.cnblogs.com/cb0327/p/57…