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

Spring Boot 日志級別及配置詳解

 更新時(shí)間:2025年07月07日 09:12:53   作者:el psy congroo  
本文講解SpringBoot日志核心:通過slf4j記錄日志,支持多級別(INFO/DEBUG/TRACE)及配置輸出格式、路徑、分割策略,便于問題定位和數(shù)據(jù)分析,同時(shí)結(jié)合Lombok簡化日志代碼,強(qiáng)調(diào)日志持久化與安全審計(jì)的重要性,感興趣的朋友一起看看吧

為什么要學(xué)習(xí)日志

最主要的原因就是發(fā)現(xiàn)和定位問題,或者根據(jù)日志來分析程序的運(yùn)行過程。隨著項(xiàng)目的復(fù)雜度提升,我們對日志的打印也有了更高的需求,而不僅僅是定位排查問題

比如需要記錄一些用戶的操作記錄(一些審計(jì)公司會要求),也可能需要使用日志來記錄用戶的一些喜好,把日志持久化,方便后續(xù)進(jìn)行數(shù)據(jù)分析等。也可以通過日志記錄這個(gè)系統(tǒng)的運(yùn)行狀態(tài),每一個(gè)方法的響應(yīng)時(shí)間,響應(yīng)狀態(tài)等,設(shè)置不同的規(guī)則,超過閾值時(shí)進(jìn)行報(bào)警

還有一些內(nèi)部的違規(guī)和信息泄漏(比如客戶信息被賣掉)現(xiàn)象出現(xiàn)后,如果未記錄留存日志,為事后調(diào)查提供依據(jù),那么后續(xù)很難追查(一些公司查看客戶信息的操作都會記錄日志,如果頻繁查詢也會報(bào)警)

日志使用

SpringBoot 內(nèi)置了日志框架 slf4j,我們可以直接調(diào)用 slf4j 來輸出日志

打印日志的步驟:

  1. 在程序中得到日志對象
  2. 使用日志對象輸出要打印的內(nèi)容

獲取日志對象需要使用 LoggerFactory,如下代碼所示:

private static final Logger logger = LoggerFactory.getLogger(XXX.class);

LoggerFactory.getLogger 需要傳遞一個(gè)參數(shù),標(biāo)識這個(gè)日志的名稱。這樣可以更清晰地知道是哪個(gè)類輸出的日志。當(dāng)有問題時(shí),可以更方便直觀地定位到問題類

注意 Logger 是屬于 org.slf4j 包下的,不要導(dǎo)錯(cuò)包

我們先使用 info () 方法來輸出日志,如下代碼所示:

import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogController {
    private static final Logger logger = LoggerFactory.getLogger(LogController.class);
    @PostConstruct
    public void logger() {
        System.out.println("打印日志");
        logger.info("打印日志");
    }
}

打印日志效果展示:

可以看到 System.out.println 打印的日志,比 slf4j 打印的日志少了很多信息

日志級別

日志級別代表著日志信息對應(yīng)問題的嚴(yán)重性, 為了更快地篩選符合目標(biāo)的日志信息

日志級別的分類

日志的級別從高到低依次為: FATAL、ERROR、WARN、INFO、DEBUG、TRACE

  1. FATAL:致命信息,表示需要立即被處理的系統(tǒng)級錯(cuò)誤
  2. ERROR:錯(cuò)誤信息,不影響系統(tǒng)的繼續(xù)運(yùn)行
  3. WARN:警告信息,不影響使用,但需要注意的問題
  4. INFO:普通信息,用于記錄應(yīng)用程序正常運(yùn)行時(shí)的一些信息,例如系統(tǒng)啟動(dòng)完成、請求處理完成等
  5. DEBUG:調(diào)試信息,需要調(diào)試時(shí)候的關(guān)鍵信息打印
  6. TRACE:追蹤信息,比 DEBUG 更細(xì)粒度的信息事件 (除非有特殊用意,否則請使用 DEBUG 級別替代)

日志級別是開發(fā)人員自己設(shè)置的,根據(jù)開發(fā)人員自己的理解來判斷該信息的重要程度,和測試人員的 Bug 級別沒有關(guān)系

日志級別的使用

針對這些級別,Logger 對象分別提供了對應(yīng)的方法來輸出日志(除了fatal)

Spring Boot 默認(rèn)集成的日志框架是 Logback。同時(shí),Spring Boot 在日志方面還整合了 SLF4J(Simple Logging Facade for Java),SLF4J 并不是一個(gè)具體的日志實(shí)現(xiàn)框架,而是一個(gè)抽象的日志門面

SLF4J 提供了一套通用的接口規(guī)范,允許開發(fā)者在不修改應(yīng)用代碼中日志調(diào)用方式的前提下,靈活切換底層實(shí)際的日志實(shí)現(xiàn)框架,比如 Logback、Log4j 等。這就使得應(yīng)用程序在不同的部署環(huán)境或基于不同的需求,可以輕松地更換日志實(shí)現(xiàn),而無需大規(guī)模改動(dòng)代碼

在 Logback 中,雖然沒有獨(dú)立的 FATAL 日志級別,但由于 SLF4J 的存在,它可以將 SLF4J 定義的 FATAL 級別進(jìn)行映射處理。具體來說,Logback 把 SLF4J 中的 FATAL 級別映射到了 ERROR 級別。這意味著,即使通過其他方式調(diào)用 FATAL ,最終也會被映射為 ERROR 級別

通過這種映射機(jī)制,即使 Logback 自身沒有專門的 FATAL 級別,但依然能夠和基于 SLF4J 的日志體系很好地兼容

@RestController
public class LogController {
    private static final Logger logger = LoggerFactory.getLogger(LogController.class);
    @PostConstruct
    public void printLog() {
        logger.error("error日志");
        logger.warn("warn日志");
        logger.info("info日志");
        logger.debug("debug日志");
        logger.trace("trace日志");
    }
}

發(fā)現(xiàn)只打印了error , warn 和 info 級別的日志。因?yàn)槿罩镜妮敵黾墑e默認(rèn)是 info ,如果不進(jìn)行任何配置,那么低于INFO級別的日志就不會打印

日志配置

配置日志級別

yml 配置

logging:
  level:
    root: debug

這樣會將 所有包(包括 Spring 框架內(nèi)部) 的日志級別都設(shè)置為 DEBUG,導(dǎo)致控制臺輸出大量框架層面的調(diào)試信息,影響排查效率

將 root 替換為自己代碼中需要打印 DEBUG 日志的包路徑,這樣僅會啟用指定包下的 DEBUG 日志,而 Spring 等其他依賴仍使用默認(rèn)級別(通常是 INFO)

如果需要對不同包設(shè)置不同級別,可以這樣配置:

logging:
  level:
    # 自定義業(yè)務(wù)包開啟 DEBUG 級別日志
    org.example.j20250702: debug
    # Spring 框架內(nèi)部日志,只打印 INFO 及更高級別
    org.springframework: info

配置日志持久化

以上的日志都是輸出在控制臺上的,然而我們常常需要把日志保存下來,以便出現(xiàn)問題之后追溯問題。把日志保存下來就叫持久化

日志持久化有兩種方式

  1. 配置日志文件的路徑和文件名:

yml 配置

logging:
  file:
    name: logger/springboot.log

后面可以跟絕對路徑或者相對路徑

運(yùn)行結(jié)果顯示,日志內(nèi)容保存在了對應(yīng)的目錄下

  1. 配置日志文件的保存路徑:

yml 配置

logging:
  file:
    path: log

后面可以跟絕對路徑或者相對路徑,但只能設(shè)置日志的路徑,文件名固定為 spring.log

運(yùn)行程序,該路徑下多出一個(gè)日志文件: spring.log

logging.file.name 和 logging.file.path 兩個(gè)都配置路徑的情況下,只生效其一,以 logging.file.name 為準(zhǔn)

配置日志文件分割

如果我們的日志都放在一個(gè)文件中,隨著項(xiàng)目的運(yùn)行,日志文件會越來越大,所以有必要對日志文件進(jìn)行分割

當(dāng)然,日志框架也考慮到了這一點(diǎn),所以如果不進(jìn)行配置,默認(rèn)日志文件超過 10MB 就進(jìn)行分割

配置項(xiàng)說明默認(rèn)值
logging.logback.rollingpolicy.file-name-pattern日志分割后的文件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.logback.rollingpolicy.max-file-size日志文件超過這個(gè)大小就自動(dòng)分割10MB

yml配置日志文件分割:

logging:
  logback:
    rollingpolicy:
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
      max-file-size: 1KB
  file:
    path: log
  • 日志文件超過 1KB 就分割 (設(shè)置 1KB 是為了更好展示文件分割)
  • 分割后的日志文件名為:日志名.日期.編號(每日重置)

配置日志打印格式

目前日志打印的格式是默認(rèn)的,我們可以進(jìn)行配置,而且支持控制臺和日志文件分別設(shè)置

配置項(xiàng)默認(rèn)值
logging.pattern.console
(控制臺日志格式)
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
logging.pattern.file
(日志文件的日志格式)
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

格式說明:

  1. %clr(表達(dá)式){顏色} :設(shè)置輸入日志的顏色,支持顏色有以下幾種:blue、cyan、faint、green、magenta、red、yellow

  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} 日期和時(shí)間 —— 精確到毫秒

%d{}: 日期

${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX} :非空表達(dá)式,獲取系統(tǒng)屬性 LOG_DATEFORMAT_PATTERN , 若不存在,則使用 yyyy-MM-dd HH:mm:ss.SSSXXX 格式,系統(tǒng)屬性可以通過System.getProperty("LOG_DATEFORMAT_PATTERN") 獲取

  1. %p 顯示日志級別 ERROR,WARN,INFO,DEBUG,TRACE。
    %t 線程名。
    %c 類的全限定名。
    %M 方法名。
    %L 行號。
    %m 或者 %msg 顯示輸出消息。
    %n 換行符。
  2. %5 表示如果字符長度小于 5,則右邊用空格填充。
    %-5 表示如果字符長度小于 5,則左邊用空格填充。
    %.15 表示如果字符長度超過 15,截去多余字符。
    %15.15 表示如果字符長度小于 15,則右邊用空格填充;若字符長度超過 15,截去多余字符。

更多說明,參考:https://logback.qos.ch/manual/layouts.html#conversionWord

yml配置

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %p %c %M %L [%t] %m%n'
    file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %p %c %M %L [%t] %m%n'

項(xiàng)目運(yùn)行, 觀察日志變化:

通常情況下,咱們就使用默認(rèn)的日志打印格式即可

設(shè)置了顏色,卻沒有生效?

需要配置,讓 idea 支持控制臺顏色顯示。打開啟動(dòng)配置,添加 VM options

在 VM options 中添加 -Dspring.output.ansi.enabled=ALWAYS

應(yīng)用并重啟程序

使用lombok提供的注解

每個(gè)類都添加一遍LoggerFactory.getLogger(xxx.class) 很繁瑣,lombok 給我們提供了一種更簡單的方式

  1. 添加 lombok 框架支持
  2. 使用 @slf4j 注解輸出日志
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

lombok 提供的 @Slf4j 會提供一個(gè)日志對象 log, 我們直接使用就可以

import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
    @PostConstruct
    public void logger() {
        log.info("打印日志");
    }
}

idea反編譯的字節(jié)碼是這樣的

到此這篇關(guān)于Spring Boot 日志的文章就介紹到這了,更多相關(guān)Spring Boot 日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Flowable中定時(shí)器的玩法詳解

    Flowable中定時(shí)器的玩法詳解

    這篇文章主要為大家詳細(xì)介紹了Flowable中定時(shí)器的各種玩法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-11-11
  • 手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    這篇文章主要介紹了如何搭建一個(gè)SpringBoot項(xiàng)目,包括環(huán)境準(zhǔn)備、創(chuàng)建新項(xiàng)目、探索項(xiàng)目結(jié)構(gòu)以及展望未來,通過詳細(xì)的步驟和實(shí)用的技巧,幫助開發(fā)者快速上手SpringBoot開發(fā),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Java服務(wù)調(diào)用失敗報(bào)Service com.oneinfinite.adflow.api.service.TestService未找到的解決方法

    Java服務(wù)調(diào)用失敗報(bào)Service com.oneinfinite.adflow.api.service.T

    在Java開發(fā)中,服務(wù)調(diào)用是常見的操作,尤其是在微服務(wù)架構(gòu)中,然而,服務(wù)調(diào)用過程中可能會遇到各種問題,下面我們來看看如何解決Service com.oneinfinite.adflow.api.service.TestService with version 0.0.0 not found的問題吧
    2025-03-03
  • Java正則表達(dá)式循環(huán)匹配字符串方式

    Java正則表達(dá)式循環(huán)匹配字符串方式

    這篇文章主要介紹了Java正則表達(dá)式循環(huán)匹配字符串方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java如何替換jar中的class文件

    Java如何替換jar中的class文件

    在調(diào)整java代碼過程中會遇到需要改jar包中的class文件的情況,改了如何替換呢?下面小編給大家分享java替換jar中的class文件的操作方法,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Spring Boot熱加載jar實(shí)現(xiàn)動(dòng)態(tài)插件的思路

    Spring Boot熱加載jar實(shí)現(xiàn)動(dòng)態(tài)插件的思路

    本文主要介紹在 Spring Boot 工程中熱加載 jar 包并注冊成為 Bean 對象的一種實(shí)現(xiàn)思路,在動(dòng)態(tài)擴(kuò)展功能的同時(shí)支持在插件中注入主程序的 Bean 實(shí)現(xiàn)功能更強(qiáng)大的插件
    2021-10-10
  • Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋

    Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋

    這篇文章主要介紹了Mybatis分頁插件Pagehelper的PageInfo字段屬性使用及解釋,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java 常量與變量的區(qū)別詳細(xì)介紹

    Java 常量與變量的區(qū)別詳細(xì)介紹

    這篇文章主要介紹了Java 常量與變量的區(qū)別的相關(guān)資料,并附實(shí)例代碼幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-10-10
  • Kotlin 和 Java 混合開發(fā)入門教程

    Kotlin 和 Java 混合開發(fā)入門教程

    這篇文章主要介紹了入門 Kotlin 和 Java 混合開發(fā),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 一文解讀Spring Bean的生命周期

    一文解讀Spring Bean的生命周期

    這篇文章主要給大家詳細(xì)解讀Spring Bean的生命周期,文中有詳細(xì)的代碼示例,對我們學(xué)習(xí)Spring Bean的生命周期有一定的幫助,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-07-07

最新評論

确山县| 安新县| 长岛县| 吴旗县| 鄂州市| 黄冈市| 留坝县| 富阳市| 丰镇市| 伊川县| 襄城县| 巢湖市| 开平市| 鄂伦春自治旗| 龙游县| 东至县| 和硕县| 图木舒克市| 合肥市| 汉沽区| 利津县| 石嘴山市| 长武县| 西盟| 台中县| 甘德县| 上虞市| 洛扎县| 建德市| 任丘市| 凌云县| 镇雄县| 房山区| 阿坝| 朝阳区| 将乐县| 东阿县| 花莲县| 汝城县| 常山县| 阿拉尔市|