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
相当于声明变量,指定name
和value
,在下面可以用${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
写日志的组件,有两个必要属性name
和class
。name
指定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
。这里的意思就是PrintSqlInterceptor
的SQL
日志会被打印到控制台,日志文件,以及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