最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Logback在SpringBoot項目中實現(xiàn)日志記錄功能

 更新時間:2025年11月25日 10:22:56   作者:Knight_AL  
日志記錄是每個應(yīng)用程序中不可或缺的一部分,尤其是對于大型應(yīng)用,日志能夠幫助我們追蹤系統(tǒng)的狀態(tài)、分析故障、監(jiān)控性能等,在Java項目中, Logback是一個非常流行的日志框架,廣泛用于SpringBoot項目中,本文給大家介紹了如何使用Logback在SpringBoot項目中實現(xiàn)日志記

一、為什么選擇 Logback?

Logback 是 SLF4J 的實現(xiàn),提供了以下優(yōu)勢:

  • 高性能:Logback 的性能優(yōu)于 Log4j,并且在處理日志時效率很高。
  • 日志輸出靈活:支持多種輸出方式,包括控制臺、文件、數(shù)據(jù)庫等。
  • 日志滾動機(jī)制:支持基于時間、大小的日志文件滾動,避免單個日志文件過大。
  • 動態(tài)配置:可以在不重啟應(yīng)用的情況下修改日志配置。
  • 與 Spring Boot 集成:Spring Boot 默認(rèn)使用 Logback,且易于集成。

二、環(huán)境準(zhǔn)備

假設(shè)我們正在開發(fā)一個電商應(yīng)用程序。我們需要為項目中的各個模塊(如購物車模塊、訂單模塊等)記錄日志。下面是我們需要用到的技術(shù)棧:

  • Spring Boot 3.x
  • Logback(已與 Spring Boot 默認(rèn)集成)
  • 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>

    <!-- 系統(tǒng)操作日志輸出 -->
    <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>

    <!-- 設(shè)置日志級別 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:配置了控制臺輸出,將日志輸出到開發(fā)者的控制臺。
  • RollingFileAppender:配置了日志文件輸出,并且使用時間滾動策略。每天一個新文件,并且最多保留 30 天的日志。
  • LevelFilter:用于過濾日志級別。file_info 只輸出 INFO 及以上的日志,file_error 只輸出 ERROR 級別的日志。
  • logger:為特定的包設(shè)置了日志級別。在本例中,com.donglin.ai 包的日志級別為 INFO,org.springframework 包的日志級別為 WARN。

四、實戰(zhàn)案例:購物車模塊日志記錄

在電商項目中,我們要在購物車模塊中記錄操作日志。比如,當(dāng)用戶將商品添加到購物車時,我們希望記錄下商品信息、數(shù)量以及操作時間等。

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("用戶 {} 添加商品 {} 到購物車,數(shù)量: {}", userId, productId, quantity);

        // 模擬業(yè)務(wù)邏輯
        if (quantity <= 0) {
            // 記錄錯誤日志
            logger.error("添加商品失敗,商品數(shù)量無效: {}", quantity);
            throw new IllegalArgumentException("商品數(shù)量無效");
        }

        // 記錄調(diào)試日志
        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 = "根據(jù)用戶ID、商品ID和數(shù)量將商品添加到購物車")
    @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 = "商品數(shù)量", 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 到購物車,數(shù)量: 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 到購物車,數(shù)量: 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 到購物車,數(shù)量: 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 到購物車,數(shù)量: 0

錯誤日志文件(error.log):

2025-10-11 14:23:49.304 [http-nio-8081-exec-7] ERROR c.d.j.a.l.s.impl.CartServiceImpl - 添加商品失敗,商品數(shù)量無效: 0

五、文件生成的時間點

在使用 TimeBasedRollingPolicy 配置時,日志文件的切割是基于時間的,通常是按照每天的零點來生成新的日志文件。所以,當(dāng)你設(shè)置了:

<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>

這意味著 日志文件每天都會滾動并生成一個新文件,但是:

  • 當(dāng)天的日志文件會一直記錄到第二天的零點才會被切割為新的文件
  • 第二天零點時,現(xiàn)有的 info.log 文件會被重命名為 info.yyyy-MM-dd.log(按日期命名),并創(chuàng)建一個新的 info.log 用于繼續(xù)記錄新的日志。

因此,今天生成的日志文件不會立即滾動到第二天的新文件,需要等到第二天零點才會生成新的日志文件。

1、驗證

修改系統(tǒng)時間

成功生成

六、總結(jié)

  1. 配置了日志的輸出路徑、格式和滾動策略。
  2. 結(jié)合實際業(yè)務(wù)場景,在 CartService 中記錄了普通操作日志、調(diào)試日志和錯誤日志。
  3. 通過 Logback 配置文件控制日志的輸出位置(控制臺和文件)以及不同級別的日志過濾。

以上就是使用Logback在SpringBoot項目中實現(xiàn)日志記錄功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Logback日志記錄的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何使用MongoDB+Springboot實現(xiàn)分布式ID的方法

    詳解如何使用MongoDB+Springboot實現(xiàn)分布式ID的方法

    這篇文章主要介紹了詳解如何使用MongoDB+Springboot實現(xiàn)分布式ID的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java常用工具類—集合排序

    Java常用工具類—集合排序

    這篇文章主要介紹了Java集合排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java中的HttpServletRequest接口詳細(xì)解讀

    Java中的HttpServletRequest接口詳細(xì)解讀

    這篇文章主要介紹了Java中的HttpServletRequest接口詳細(xì)解讀,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下
    2023-11-11
  • Spring?Boot?整合?Fisco?Bcos部署、調(diào)用區(qū)塊鏈合約的案例

    Spring?Boot?整合?Fisco?Bcos部署、調(diào)用區(qū)塊鏈合約的案例

    本篇文章介紹?Spring?Boot?整合?Fisco?Bcos?的相關(guān)技術(shù),最最重要的技術(shù)點,部署、調(diào)用區(qū)塊鏈合約的工程案例,本文通過流程分析給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-01-01
  • 通過實例解析Java分布式鎖三種實現(xiàn)方法

    通過實例解析Java分布式鎖三種實現(xiàn)方法

    這篇文章主要介紹了通過實例解析Java分布式鎖三種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java的springcloud Sentinel是什么你知道嗎

    Java的springcloud Sentinel是什么你知道嗎

    這篇文章主要介紹了Java之springcloud Sentinel案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java注解的簡單入門小案例

    Java注解的簡單入門小案例

    這篇文章主要介紹了Java注解的簡單入門小案例,注解是干什么的?怎么使用?注解的簡單用法,需要的朋友可以參考下
    2023-04-04
  • JDK版本修改不生效的解決方法

    JDK版本修改不生效的解決方法

    本文主要介紹了在配置新電腦環(huán)境時遇到JDK版本切換失敗的問題,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • spring Profile如何為不同環(huán)境提供不同的配置支持

    spring Profile如何為不同環(huán)境提供不同的配置支持

    這篇文章主要介紹了spring Profile如何為不同環(huán)境提供不同的配置支持,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Linux環(huán)境下Java調(diào)用Python腳本的常見問題解決

    Linux環(huán)境下Java調(diào)用Python腳本的常見問題解決

    做一個項目,需要使用java調(diào)用Python腳本,從開始各種錯誤到最后調(diào)用成功,所以這篇文章就來記錄一下,有需要的小伙伴可以參考一下
    2025-06-06

最新評論

乳源| 九龙城区| 丘北县| 修武县| 梓潼县| 永安市| 湾仔区| 新竹市| 宁城县| 洛阳市| 东丽区| 兰西县| 浦城县| 上栗县| 龙南县| 西华县| 乳源| 清河县| 孝昌县| 稻城县| 桓仁| 江口县| SHOW| 长武县| 青海省| 积石山| 亳州市| 珲春市| 高邮市| 玉树县| 靖安县| 米泉市| 威信县| 永康市| 根河市| 汤阴县| 特克斯县| 枣庄市| 双流县| 博湖县| 渭南市|