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

本文将深入讲解如何在 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
文件介绍




12
- 如图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 条)

