给 SpringBoot 项目配一套优雅实用的 logback 日志配置
文章目录1 摘要2 完整配置文件3 配置说明3.1 怎么个优雅法3.2 怎么个实用法4 推荐参考资料1 摘要logback 作为SpringBoot 默认日志记录框架,足以见得其技术地位。很多人随便从网上找一个 logback 的配置文件,但是多少有一些使用不便的地方,作为一个对代码有洁癖的开发者,作者自己折腾了一个既优雅又实用的 logback 日志配置模板。logback 官方文档:htt
1 摘要
logback 作为SpringBoot 默认日志记录框架,足以见得其技术地位。很多人随便从网上找一个 logback 的配置文件,但是多少有一些使用不便的地方,作为一个对代码有洁癖的开发者,作者自己折腾了一个既优雅又实用的 logback 日志配置模板。
logback 官方文档:
http://logback.qos.ch/documentation.html
2 完整配置文件
废话不多说,先上配置文件
./web/src/main/resources/logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 属性定义 -->
<property name="LOG_HOME" value="../../logs/stock-alert" />
<property name="maxHistory" value="90" />
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger{100} %L\)| %msg%n"/>
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss} | %-5level | %thread | %logger{100} %L\ | %msg%n" />
<!-- ConsoleAppender 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 对日志进行格式化 -->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- INFO级别日志 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,记录「INFO」及以上级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info/infoLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- ERROR级别日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录「ERROR」级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error/errorLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- eg: com.ljq.test 类的日志输出 info 及以上级别的日志 -->
<!--<logger name="com.ljq.test" level="info" />-->
<!-- eg: com.ljq.test1 类的日志不输出 -->
<!--<logger name="com.ljq.test1" additivity="false" />-->
<logger name="org.apache.ibatis.io" level="info" />
<logger name="org.mybatis.spring" level="info" />
<logger name="com.baomidou.mybatisplus.core.MybatisConfiguration" level="info" />
<logger name="com.baomidou.mybatisplus.extension" level="info" />
<logger name="org.hibernate.validator" level="info" />
<logger name="org.apache.http" level="warn" />
<logger name="com.zaxxer.hikari" level="info" />
<logger name="org.springframework" level="info" />
<logger name="_org.springframework" level="info" />
<logger name="springfox" level="info" />
<logger name="io.springfox" level="info" />
<logger name="io.swagger" level="info" />
<logger name="io.lettuce" level="info" />
<logger name="io.netty" level="info" />
<!-- 根日志,所有日志appender都必须包含在root/logger中,否则不会起作用 -->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</root>
</configuration>
3 配置说明
3.1 怎么个优雅法
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger{100} %L\)| %msg%n"/>
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss} | %-5level | %thread | %logger{100} %L\ | %msg%n" />
这里定义了两种日志输出格式,CONSOLE_LOG_PATTERN
即为控制台输出日志的格式,该配置添加了高亮显示,当开发者在调试环境中运行程序的时候,不同的颜色比统一的黑色要看起来舒服多了,而且不同级别的日志颜色不同,也能够快速定位问题。
是否包含高亮显示的对比图
3.2 怎么个实用法
- 作者这里持久化的日志只定义了两种级别,即
info
级别以及error
级别,简化了文件日志分级,一般情况下这两种级别的日志已经够用了。info
级别的日志用于记录程序的必要信息,而error
级别的日志用于记录程序异常信息,方便排查问题。至于debug
级别的日志,只需要在开发的时候输出到控制台即可,不需要输出的文件中,节约服务器资源。
info
级别日志文件信息(文件日志中是不包含 Mybatis sql 执行过程的,而控制台的日志中是包含的):
info
级别的日志包含了info
级别及以上的日志,而error
级别的日志只包含error
级别的日志。当我们在查看日志信息的时候,可以从info
级别中查看到完整的日志信息。如果严格按照每一种级别的日志都单独存储,则排查问题的时候,一个问题还要打开好几个日志文件,从而增加了排查难度。
注意: info
级别的日志等级过滤器和 error
级别的日志等级过滤器不一样
<!-- 过滤器,记录「INFO」及以上级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- 过滤器,只记录「ERROR」级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
- 特定类的日志过滤级别设置。一些常用的公共类库在执行的时候会输出很多的日志,这些日志信息会影响开发者排查与定位问题,可以在 logback 中定义日志的输出级别来减少不必要的日志干扰。
<!-- eg: com.ljq.test 类的日志输出 info 及以上级别的日志 -->
<!--<logger name="com.ljq.test" level="info" />-->
<!-- eg: com.ljq.test1 类的日志不输出 -->
<!--<logger name="com.ljq.test1" additivity="false" />-->
<logger name="org.apache.ibatis.io" level="info" />
<logger name="org.mybatis.spring" level="info" />
<logger name="com.baomidou.mybatisplus.core.MybatisConfiguration" level="info" />
<logger name="com.baomidou.mybatisplus.extension" level="info" />
<logger name="org.hibernate.validator" level="info" />
<logger name="org.apache.http" level="warn" />
<logger name="com.zaxxer.hikari" level="info" />
4 推荐参考资料
5 Github 源码
Gtihub 源码地址 : https://github.com/Flying9001/springBootDemo
个人公众号:404Code,分享半个互联网人的技术与思考,感兴趣的可以关注.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)