使用Logback在SpringBoot项目中实现日志记录功能
作者:Knight_AL
日志记录是每个应用程序中不可或缺的一部分,尤其是对于大型应用,日志能够帮助我们追踪系统的状态、分析故障、监控性能等,在Java项目中, Logback是一个非常流行的日志框架,广泛用于SpringBoot项目中,本文给大家介绍了如何使用Logback在SpringBoot项目中实现日志记
一、为什么选择 Logback?
Logback 是 SLF4J 的实现,提供了以下优势:
- 高性能:Logback 的性能优于 Log4j,并且在处理日志时效率很高。
- 日志输出灵活:支持多种输出方式,包括控制台、文件、数据库等。
- 日志滚动机制:支持基于时间、大小的日志文件滚动,避免单个日志文件过大。
- 动态配置:可以在不重启应用的情况下修改日志配置。
- 与 Spring Boot 集成:Spring Boot 默认使用 Logback,且易于集成。
二、环境准备
假设我们正在开发一个电商应用程序。我们需要为项目中的各个模块(如购物车模块、订单模块等)记录日志。下面是我们需要用到的技术栈:
- Spring Boot 3.x
- Logback(已与 Spring Boot 默认集成)
- SLF4J(作为日志接口)
三、配置 Logback
1、配置文件 logback.xml
在 Spring Boot 项目的 resources 目录下,我们通常会添加一个名为 logback.xml 的文件,用于配置日志的输出格式、级别、文件位置等。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/donglin-cart" />
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统操作日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 日志文件滚动策略:基于时间滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留最多30天的日志 -->
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 错误日志输出 -->
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 设置日志级别 com.donglin.ai这个目录下的都会被记录-->
<logger name="com.donglin.ai" level="info" />
<logger name="org.springframework" level="warn" />
<!-- 根日志配置 -->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
配置解析:
- log.path:定义了日志文件的存放路径。在本例中,日志文件将保存在
logs/donglin-cart目录下。 - log.pattern:定义了日志输出的格式,包含了时间戳、线程名、日志级别、日志消息等。
- console appender:配置了控制台输出,将日志输出到开发者的控制台。
- RollingFileAppender:配置了日志文件输出,并且使用时间滚动策略。每天一个新文件,并且最多保留 30 天的日志。
- LevelFilter:用于过滤日志级别。
file_info只输出INFO及以上的日志,file_error只输出ERROR级别的日志。 - logger:为特定的包设置了日志级别。在本例中,
com.donglin.ai包的日志级别为INFO,org.springframework包的日志级别为WARN。
四、实战案例:购物车模块日志记录
在电商项目中,我们要在购物车模块中记录操作日志。比如,当用户将商品添加到购物车时,我们希望记录下商品信息、数量以及操作时间等。
1、CartServiceImpl.java
package com.donglin.java.ai.langchain4j.service.impl;
import com.donglin.java.ai.langchain4j.service.CartService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
public class CartServiceImpl implements CartService {
private static final Logger logger = LoggerFactory.getLogger(CartServiceImpl.class);
public void addToCart(Long userId, Long productId, Integer quantity) {
// 记录普通信息日志
logger.info("用户 {} 添加商品 {} 到购物车,数量: {}", userId, productId, quantity);
// 模拟业务逻辑
if (quantity <= 0) {
// 记录错误日志
logger.error("添加商品失败,商品数量无效: {}", quantity);
throw new IllegalArgumentException("商品数量无效");
}
// 记录调试日志
logger.debug("正在将商品 {} 添加到用户 {} 的购物车中...", productId, userId);
// 成功后记录信息日志
logger.info("商品 {} 成功添加到用户 {} 的购物车中", productId, userId);
}
}
2、CartController.java
package com.donglin.java.ai.langchain4j.controller;
import com.donglin.java.ai.langchain4j.service.CartService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/cart")
public class CartController {
@Autowired
private CartService cartService;
@Operation(summary = "将商品添加到购物车", description = "根据用户ID、商品ID和数量将商品添加到购物车")
@PostMapping("/add")
public String addToCart(
@Parameter(name = "userId", description = "用户ID", required = true) @RequestParam Long userId,
@Parameter(name = "productId", description = "商品ID", required = true) @RequestParam Long productId,
@Parameter(name = "quantity", description = "商品数量", required = true) @RequestParam Integer quantity) {
try {
cartService.addToCart(userId, productId, quantity);
return "商品已成功添加到购物车";
} catch (Exception e) {
// 错误日志
return "添加商品到购物车失败";
}
}
}
3、日志输出
在控制台和日志文件中,你将看到如下日志输出:
控制台日志:
2025-10-11 14:23:44.526 [http-nio-8081-exec-3] INFO c.d.j.a.l.s.impl.CartServiceImpl - 用户 1 添加商品 2 到购物车,数量: 6 2025-10-11 14:23:44.527 [http-nio-8081-exec-3] INFO c.d.j.a.l.s.impl.CartServiceImpl - 商品 2 成功添加到用户 1 的购物车中 2025-10-11 14:23:45.089 [http-nio-8081-exec-4] INFO c.d.j.a.l.s.impl.CartServiceImpl - 用户 1 添加商品 2 到购物车,数量: 6 2025-10-11 14:23:45.089 [http-nio-8081-exec-4] INFO c.d.j.a.l.s.impl.CartServiceImpl - 商品 2 成功添加到用户 1 的购物车中 2025-10-11 14:23:45.521 [http-nio-8081-exec-5] INFO c.d.j.a.l.s.impl.CartServiceImpl - 用户 1 添加商品 2 到购物车,数量: 6 2025-10-11 14:23:45.521 [http-nio-8081-exec-5] INFO c.d.j.a.l.s.impl.CartServiceImpl - 商品 2 成功添加到用户 1 的购物车中 2025-10-11 14:23:48.322 [http-nio-8081-exec-6] INFO c.d.j.a.l.s.impl.CartServiceImpl - 用户 1 添加商品 2 到购物车,数量: 0
错误日志文件(error.log):
2025-10-11 14:23:49.304 [http-nio-8081-exec-7] ERROR c.d.j.a.l.s.impl.CartServiceImpl - 添加商品失败,商品数量无效: 0

五、文件生成的时间点
在使用 TimeBasedRollingPolicy 配置时,日志文件的切割是基于时间的,通常是按照每天的零点来生成新的日志文件。所以,当你设置了:
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
这意味着 日志文件每天都会滚动并生成一个新文件,但是:
- 当天的日志文件会一直记录到第二天的零点才会被切割为新的文件。
- 第二天零点时,现有的
info.log文件会被重命名为info.yyyy-MM-dd.log(按日期命名),并创建一个新的info.log用于继续记录新的日志。
因此,今天生成的日志文件不会立即滚动到第二天的新文件,需要等到第二天零点才会生成新的日志文件。
1、验证
修改系统时间

成功生成

六、总结
- 配置了日志的输出路径、格式和滚动策略。
- 结合实际业务场景,在
CartService中记录了普通操作日志、调试日志和错误日志。 - 通过 Logback 配置文件控制日志的输出位置(控制台和文件)以及不同级别的日志过滤。
以上就是使用Logback在SpringBoot项目中实现日志记录功能的详细内容,更多关于SpringBoot Logback日志记录的资料请关注脚本之家其它相关文章!
