java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot Logback日志记录

使用Logback在SpringBoot项目中实现日志记录功能

作者:Knight_AL

日志记录是每个应用程序中不可或缺的一部分,尤其是对于大型应用,日志能够帮助我们追踪系统的状态、分析故障、监控性能等,在Java项目中, Logback是一个非常流行的日志框架,广泛用于SpringBoot项目中,本文给大家介绍了如何使用Logback在SpringBoot项目中实现日志记

一、为什么选择 Logback?

Logback 是 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>

配置解析:

四、实战案例:购物车模块日志记录

在电商项目中,我们要在购物车模块中记录操作日志。比如,当用户将商品添加到购物车时,我们希望记录下商品信息、数量以及操作时间等。

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>

这意味着 日志文件每天都会滚动并生成一个新文件,但是:

因此,今天生成的日志文件不会立即滚动到第二天的新文件,需要等到第二天零点才会生成新的日志文件。

1、验证

修改系统时间

成功生成

六、总结

  1. 配置了日志的输出路径、格式和滚动策略。
  2. 结合实际业务场景,在 CartService 中记录了普通操作日志、调试日志和错误日志。
  3. 通过 Logback 配置文件控制日志的输出位置(控制台和文件)以及不同级别的日志过滤。

以上就是使用Logback在SpringBoot项目中实现日志记录功能的详细内容,更多关于SpringBoot Logback日志记录的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文