0


6.3 SpringBoot日志进阶实战 Logback配置详解

CSDN成就一亿技术人

文章目录


前言

在上一篇文章中,我和你介绍了SpringBoot快速入门Slf4j + Logback实战,遗留的问题是如何将日志输出到文件。

今天这篇文章分享了我在SpringBoot中使用Logback配置日志的经验和方法,并提供了详细的代码示例和解释,包括:滚动文件、异步日志记录、动态指定属性、日志级别、配置文件等常用功能,覆盖日常Logback配置开发90%的知识点!


一、Logback入门级配置

在tg-book-web的src\main\resources下创建logback-spring.xml文件,这里给出最简单的输出到

控制台

文件

的示例

<?xml version="1.0" encoding="UTF-8"?><configuration><!-- 定义属性,可以通过“${}”来使用属性 --><propertyname="LOG_PATH"value="d:/logs/"/><propertyname="APP_ID"value="tg-book"/><!-- 把日志输出到控制台 --><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern></encoder></appender><!-- 把日志输出到文件 --><appendername="FILE"class="ch.qos.logback.core.FileAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern><charset>UTF-8</charset></encoder><file>${LOG_PATH}/${APP_ID}.log</file></appender><!-- 大于等于info级别的才会输出 --><rootlevel="info"><appender-refref="STDOUT"/><appender-refref="FILE"/></root></configuration>

上面的配置,将输出日志到文件d:/logs/tg-book.log中。

常用节点的解释:

  1. configuration:根节点,包含所有配置信息。
  2. property:定义属性,可以通过“${}”来使用属性
  3. appender:定义输出器的名称、类型、编码、日志输出路径等信息。 - class=“ch.qos.logback.core.ConsoleAppender”:输出到控制台- class=“ch.qos.logback.core.FileAppender”:输出到文件
  4. root:定义日志记录器的根节点,指定默认的日志记录级别、输出器等信息。

二、动态指定属性

定义springProperty标签,通过指定source来源于application.properties的配置值!

  • 修改上面的logback-spring.xml文件,仅将property 标签注释,新增springProperty标签,如下:
<!--<property name="LOG_PATH" value="d:/logs/"/>
<property name="APP_ID" value="tg-book"/>--><springPropertyname="LOG_PATH"source="log.path"/><springPropertyname="APP_ID"source="app.id"/>
  • 修改application.properties文件,新增log.path和app.id配置:
app.id=tg-book
log.path=d:/logs/

三、动态指定日志级别

可以在application.properties文件中设置

logging.level.包路径=日志级别

来更改日志级别!

  • 例如,修改包org.tg.book.dal.mapper的日志级别=debug
logging.level.org.tg.book.dal.mapper = debug

此时,我们调用login接口,将输出debug级别的mybatis的sql日志,如下图:
在这里插入图片描述

  • 也可以修改root的日志级别
logging.level.root= warn

此时,所有包,将只输出warn、error级别日志。


四、指定配置文件

可以在application.properties文件中设置

logging.config=classpath:logback-spring-2.xml

来指定配置文件,如果不指定默认就是classpath:logback-spring.xml!


五、滚动记录RollingFIleAppender

RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个策略条件时,将日志记录到其余文件。

我们新增一个RollingFileAppender,并修改root的appender-ref,详细如下:

<!-- 把日志滚动输出到各文件 --><appendername="ROLLING_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern><charset>UTF-8</charset></encoder><file>${LOG_PATH}/${APP_ID}-rolling.log</file><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern><maxFileSize>100MB</maxFileSize><!-- 文件最大大小,可能会超出 --><maxHistory>30</maxHistory><!-- 保存30天 --><totalSizeCap>10GB</totalSizeCap><!-- 总日志大小 --></rollingPolicy></appender><rootlevel="info"><appender-refref="STDOUT"/><appender-refref="ROLLING_FILE"/></root>

SizeAndTimeBasedRollingPolicy是常用的滚动策略,配置节点说明如下:

  • maxFileSize:当D:\logs\tg-book-rolling.log文件达到100MB以后,会自动创建新文件!测试时,你可以指定maxFileSize小一点,比如100KB。
  • maxHistory:最大保存多长时间,单位是天
  • totalSizeCap:总日志大小

六、异步记录AsyncAppender

AsyncAppender可以将日志消息异步地发送到目标Appender,以提高应用程序的性能和响应速度。

我们新增两个AsyncAppender,一个指定控制台,一个指定文件,如下:

<!-- 把日志异步输出到控制台 --><appendername="ASYNC-STDOUT"class="ch.qos.logback.classic.AsyncAppender"><!-- 指定队列满载时,消息将被丢弃的数量, 默认值为0 --><discardingThreshold>0</discardingThreshold><!-- 队列的大小, 默认值为256 --><queueSize>1024</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 异步打印堆栈信息不丢失--><includeCallerData>true</includeCallerData><!-- 添加附加的appender,最多只能添加一个 --><appender-refref="STDOUT"/></appender><!-- 把日志异步滚动输出到文件 --><appendername="ASYNC-FILE"class="ch.qos.logback.classic.AsyncAppender"><!-- 指定队列满载时,消息将被丢弃的数量, 默认值为0 --><discardingThreshold>0</discardingThreshold><!-- 队列的大小, 默认值为256 --><queueSize>1024</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 异步打印堆栈信息不丢失--><includeCallerData>true</includeCallerData><!-- 添加附加的appender,最多只能添加一个 --><appender-refref="ROLLING_FILE"/></appender><!-- 大于等于info级别的才会输出 --><rootlevel="info"><!--<appender-ref ref="STDOUT"/>
    <appender-ref ref="ROLLING_FILE"/>--><appender-refref="ASYNC-STDOUT"/><appender-refref="ASYNC-FILE"/></root>

AsyncAppender具有以下参数:

  • QueueSize:指定用于暂存消息的BlockingQueue队列的大小。默认值为256。
  • DiscardingThreshold:指定队列满载时,消息将被丢弃的数量。默认值为0。
  • NeverBlock:指定当队列已满时,是否阻止应用程序运行。如果设置为true,当队列已满时,应用程序将继续运行,但消息可能会丢失。默认值为false。
  • IncludeCallerData:指定是否在记录器中包含调用者信息。默认值为false。
  • AppenderRef:指定一个或多个目标Appender引用的列表。每个引用都必须引用一个已定义的Appender。
  • DiscardingThresholdPolicyClassName:指定当队列满时,应采取的策略类的名称。默认使用的是DiscardingThresholdPolicy类。
  • QueueFullPolicyClassName:指定当队列已满时,应采取的策略类的名称。默认使用的是DiscardingQueueFullPolicy类。

总结

最终的

logback-spring.xml

配置文件如下:

<?xml version="1.0" encoding="UTF-8"?><configuration><!-- 定义属性,可以通过“${}”来使用属性 --><!--<property name="LOG_PATH" value="d:/logs/"/>
    <property name="APP_ID" value="tg-book"/>--><springPropertyname="LOG_PATH"source="log.path"/><springPropertyname="APP_ID"source="app.id"/><!-- 把日志输出到控制台 --><appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern></encoder></appender><!-- 把日志输出到文件 --><appendername="FILE"class="ch.qos.logback.core.FileAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern><charset>UTF-8</charset></encoder><file>${LOG_PATH}/${APP_ID}.log</file></appender><!-- 把日志滚动输出到各文件 --><appendername="ROLLING_FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%level] [%thread] %logger{36} %L - %msg%xEx%n</pattern><charset>UTF-8</charset></encoder><file>${LOG_PATH}/${APP_ID}-rolling.log</file><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/${APP_ID}-%d{yyyyMMdd}-%i.log</fileNamePattern><maxFileSize>500KB</maxFileSize><!-- 文件最大大小,可能会超出 --><maxHistory>30</maxHistory><!-- 保存30天 --><totalSizeCap>10GB</totalSizeCap><!-- 总日志大小 --></rollingPolicy></appender><!-- 把日志异步输出到控制台 --><appendername="ASYNC-STDOUT"class="ch.qos.logback.classic.AsyncAppender"><!-- 指定队列满载时,消息将被丢弃的数量, 默认值为0 --><discardingThreshold>0</discardingThreshold><!-- 队列的大小, 默认值为256 --><queueSize>1024</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 异步打印堆栈信息不丢失--><includeCallerData>true</includeCallerData><!-- 添加附加的appender,最多只能添加一个 --><appender-refref="STDOUT"/></appender><!-- 把日志异步滚动输出到文件 --><appendername="ASYNC-FILE"class="ch.qos.logback.classic.AsyncAppender"><!-- 指定队列满载时,消息将被丢弃的数量, 默认值为0 --><discardingThreshold>0</discardingThreshold><!-- 队列的大小, 默认值为256 --><queueSize>1024</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 异步打印堆栈信息不丢失--><includeCallerData>true</includeCallerData><!-- 添加附加的appender,最多只能添加一个 --><appender-refref="ROLLING_FILE"/></appender><!-- 大于等于info级别的才会输出 --><rootlevel="info"><!--<appender-ref ref="STDOUT"/>
        <appender-ref ref="ROLLING_FILE"/>--><appender-refref="ASYNC-STDOUT"/><appender-refref="ASYNC-FILE"/></root></configuration>
application.properties

增加配置:

#logging.config=classpath:logback-spring.xml
app.id=tg-book
log.path=d:/logs/
logging.level.root = info
#logging.level.org.tg.book.dal.mapper = debug

最后

不知道大家看的过不过瘾?

想要更多过瘾的好文章,给大家推荐一门专栏课程–>《基于SpringBoot+SpringCloud+Vue前后端分离项目实战》,由我和 前端狗哥 合力打造的一款专栏,可以让你从0到1快速拥有企业级规范的项目实战经验!

具体的优势、规划、技术选型都可以在《开篇》试读!

博主保证会用心持续高质量输出文章哦!

订阅专栏后也可以添加博主的微信,博主会为每一位用户进行针对性指导!

另外,别忘了关注我:天罡gg ,发布新文不容易错过: https://blog.csdn.net/scm_2008

老规矩,请投票给我反馈,谢谢大家的支持!


本文转载自: https://blog.csdn.net/scm_2008/article/details/130911167
版权归原作者 天罡gg 所有, 如有侵权,请联系我们删除。

“6.3 SpringBoot日志进阶实战 Logback配置详解”的评论:

还没有评论