Logback 集成Spring Boot配置日志生产以及自动化切割日志

崧峻
原创
发布时间: 2025-06-11 14:20:17 | 阅读数 0收藏数 0评论数 0
封面
本文将深入讲解如何在 Spring Boot 项目中高效集成 Logback,涵盖日志级别管理、自定义格式输出、日志文件落地,以及按时间或大小自动滚动切割日志等实用技巧。通过实际配置示例,你将掌握构建企业级日志体系的关键能力,让你的日志输出更规范、更清晰、更易于运维监控。
1

什么是logback

Logback 旨在继承广受欢迎的 log4j 项目。它由 log4j 的创始人 Ceki Gülcü 设计,并基于其十年来在设计工业级日志系统方面积累的经验。最终的产品 logback 比所有现有日志系统都更快、占用空间更小,有时甚至更胜一筹。同样重要的是,logback 提供了其他日志系统所缺乏的独特且实用的功能。


Spring Boot 默认通过 spring-boot-starter-logging 依赖集成 Logback,支持开箱即用的日志功能。


logback 的优势如下:


特性

Logback 优势

性能

快速、高效、适合高并发

可配置性

支持 XML 和 Groovy,自定义灵活

与 SLF4J 配合

原生集成,无缝适配

功能丰富

日志轮转、归档、过滤、多目的地输出

易用性与稳定性

文档齐全、社区活跃,企业级项目广泛应用

2

文件介绍

  1. 如图1所示在resource目录下新建一个logback的 xml 文件
logback-spring.xml:Spring Boot 使用 支持 ${spring.profile} 就比如-> 如图2 一个是开发环境使用 一个是生产环境使用,可以更好的区分开发环境和生产环境的配置。
logback.xml:标准 Logback 配置文件,不支持 Spring 占位符。
3

基础配置介绍

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

debug : 默认为false ,设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。
scan : 配置文件如果发生改变,将会重新加载,默认值为true;
scanPeriod : 检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位时毫秒
             只有当scan为true时,这个属性生效,默认时间间隔为1分钟 上面代码代表是60s 也就是一分钟。


上下文名称

<contextName>DOIT</contextName> 上下文名称 一般是项目名称之类的


属性

<property name="log.path" value="/Users/gjq/IdeaProjects/doit_background/logs"/>

类似于声明个常量 名字为log.path 值是value



<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>

appender:定义日志的输出目的地:
    ConsoleAppender:将日志输出到控制台。
    FileAppender:将日志输出到文件。
    RollingFileAppender:支持日志滚动策略 就是会更新替换

Encoder 配置日志格式,支持以下占位符: charset是编码格式 pattern 是输出内容

%d{pattern}:日期(如 %d{yyyy-MM-dd HH:mm:ss})。
%thread:线程名。
%level:日志级别(如 INFO)。
%logger:日志来源类名(可截断,如 %logger{36})。
%msg:日志消息内容。


4

日志切割

<!-- 输出到文件中去 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 日志输出到那个文件 -->
<file>${log.path}/doitLogback.log</file>
<!-- 指定日志文件拆分和压缩规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--定义文件滚动时的文件名的格式-->
<fileNamePattern>${log.path}/doitLogback_%d{yyyyMMdd}_%i.log.gz</fileNamePattern>
<!-- 如果当前是按天保存,则保存 180 天(= 半年)内的日志 -->
<MaxHistory>180</MaxHistory>
<!-- 最大文件大小 -->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
</appender>
5

druid配置 打印(可选)

<!--普通日志输出到控制台-->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>

<!-- 是否开启数据库日志 开启的话 把OFF换成 INFO -->
<logger name="druid.sql.DataSource" level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>

<!-- 打印静态 SQL 语句相关的内容。 开启的话 把OFF换成 debug -->
<logger name="druid.sql.Statement" additivity="false" level="OFF">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>

<!-- 是否开启数据库连接的过程日志 开启的话 把OFF换成 INFO -->
<logger name="druid.sql.Connection" level="OFF">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
6

整体日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="60 seconds">

<contextName>test</contextName>

<!-- 开发环境日志存放的地址 -->
<springProfile name="dev">
<!-- 日志存放的地址 -->
<property name="log.path" value="logs"/>
</springProfile>

<!-- 生产环境日志存放的地址 -->
<springProfile name="prod">
<!-- 日志存放的地址 -->
<property name="log.path" value="logs"/>
</springProfile>

<!-- 控制台时间 -->
<property name="log.pattern"
value="%contextName- %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %msg%n"/>

<!-- 编码 -->
<property name="log.charset" value="utf-8"/>

<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
</appender>

<!-- 输出到文件中去 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${log.pattern}</pattern>
<charset>${log.charset}</charset>
</encoder>
<!-- 日志输出到那个文件 -->
<file>${log.path}/doitLogback.log</file>
<!-- 指定日志文件拆分和压缩规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--定义文件滚动时的文件名的格式-->
<fileNamePattern>${log.path}/doitLogback_%d{yyyyMMdd}_%i.log.gz</fileNamePattern>
<!-- 如果当前是按天保存,则保存 180 天(= 半年)内的日志 -->
<MaxHistory>180</MaxHistory>
<!-- 最大文件大小 -->
<MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>
</appender>

<!--普通日志输出到控制台-->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>

<!-- 是否开启数据库日志 开启的话 把OFF换成 INFO -->
<logger name="druid.sql.DataSource" level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>

<!-- 打印静态 SQL 语句相关的内容。 开启的话 把OFF换成 debug -->
<logger name="druid.sql.Statement" additivity="false" level="OFF">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>

<!-- 是否开启数据库连接的过程日志 开启的话 把OFF换成 INFO -->
<logger name="druid.sql.Connection" level="OFF">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>

</configuration>
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载