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

SpringBoot日志從調(diào)試到持久化的全解析

 更新時間:2026年03月16日 10:34:06   作者:稻草貓.  
這篇文章主要介紹了Spring?Boot項目中日志的用途、使用方法、日志級別、配置以及持久化等方面的內(nèi)容,日志是開發(fā)者排查問題、監(jiān)控系統(tǒng)運行狀態(tài)的重要工具,感興趣的朋友跟隨小編一起看看吧

一. 日志的用途

  • 排錯調(diào)試:出問題時看日志,快速定位代碼哪里錯、參數(shù)是什么、異常棧在哪。
  • 監(jiān)控運行狀態(tài):看程序啟動是否成功、接口是否正常、服務有沒有卡頓。
  •  記錄關(guān)鍵行為:誰登錄了、調(diào)用了什么接口、操作了什么數(shù)據(jù),方便追溯。
  • ?統(tǒng)計與分析:接口耗時、訪問量、錯誤率,用于優(yōu)化性能和容量規(guī)劃。
  • ?線上問題復盤:服務崩潰、宕機后,靠日志還原現(xiàn)場。

 簡單一句話:
日志就是 Spring Boot 項目的“黑匣子”,用來記錄、排查、監(jiān)控、追溯一切運行信息。

二. 日志使用

Spring Boot 項目在啟動的時候默認就有日志輸出,如下圖所示:

它打印的?志和 System.out.print 有什么不同呢

System.out.prin 打的日志:

使用日志對象打印對象:

@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/logger")
    public String logger(){
        logger.info("打印?志");
        return "打印?志成功";
    }
}

可以看到,我們通過 System.out.print 打印的日志,比 SpringBoot 打印的日志缺少了很多信息.

SpringBoot內(nèi)置了日志框架Slf4j ,我們可以直接在程序中調(diào)?Slf4j 來輸出?志

2.1 打印日志

打印日志的步驟:

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

在程序中得到日志對象:

在程序中獲取日志對象需要使用日志工廠 LoggerFactory,如下代碼所示:

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);//一般為固定代碼

我們通常用 LoggerFactory.getLogger(當前類.class)  來獲取日志對象,這個方法會根據(jù)傳入的類信息,生成一個與當前類綁定的日志對象。

不同類獲取的日志對象,會在輸出日志時帶上自己類的名稱,方便你快速定位日志來源。(每個類都可以獲取屬于自己的獨立日志對象)

注意:Logger 對象是屬于 org.slf4j 包下的, 不要導?錯包.

使用日志對象輸出要打印的內(nèi)容:

?志對象的打印?法有很多種,我們可以先使?info()?法來輸出?志,如下代碼所?:

package logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/logger")
    public String logger(){
        logger.info("打印?志");
        return "打印?志成功";
    }
}

2.2 日志格式的說明

當我們在配置文件中加入以下配置會發(fā)生什么:

spring.application.name=logger

我們發(fā)現(xiàn)日志多出來個內(nèi)容--- 項目名稱

注意:該配置是我們在創(chuàng)建Spring Boot項目時自動生成的 properties 配置文件中所自帶的配置項

2.3 日志級別

?志級別代表著?志信息對應問題的嚴重性,為了更快的篩選符合?標的?志信息.

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

• FATAL:致命信息,表?需要?即被處理的系統(tǒng)級錯誤. 

• ERROR:錯誤信息,級別較?的錯誤?志信息,但仍然不影響系統(tǒng)的繼續(xù)運?.

• WARN:警告信息,不影響使?,但需要注意的問題

 • INFO:普通信息,?于記錄應?程序正常運?時的?些信息,例如系統(tǒng)啟動完成、請求處理完成等. 

• DEBUG:調(diào)試信息,需要調(diào)試時候的關(guān)鍵信息打印. (Spring默認不打?。?/p>

• TRACE:追蹤信息,?DEBUG更細粒度的信息事件(除?有特殊?意,否則請使?DEBUG級別替代)(默認不打?。?/p>

日志級別的順序:

針對這些級別, Logger 對象分別提供了對應的?法,來輸出?志.,代碼如下所示:

@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/logger")
    public String logger(){
        logger.trace("================= trace ===============");
        logger.debug("================= debug ===============");
        logger.info("================= info ===============");
        logger.warn("================= warn ===============");
        logger.error("================= error ===============");
        return "打印?志成功";
    }
}

我們發(fā)現(xiàn) debug 和 trace 級別的日志沒有被打印---這與?志級別的配置有關(guān),?志的輸出級別默認是 info級別(下面的內(nèi)容中會講到如何配置), 所以只會打印?于等于此級別的?志,也就 是 info , warn 和 error.

2.4 日志配置

2.4 1 配置日志級別

日志級別配置只需要在配置文件中設(shè)置"logging.level"配置項即可,如下所示:

logging:
  level:
    root: trace
 

加上這個配置后,所有trace級別的日志后,與它同級及高于此級的日志都可以打印出來了

注意:我們這里設(shè)置的日志級別是默認針對整個文件的,我們還可以指定文件進行日志級別的配置,配置代碼如下所示:

logging:
  level:
    root: debug
    logger: info #logger為當前項目下的一個包名

2.4.2 日志持久化

以上的?志都是輸出在控制臺上的, 重啟服務器日志就會丟失,然而在線上環(huán)境中, 我們需要把?志保存下來, 以便出現(xiàn)問題之后追 溯問題. 把?志保存下來就叫持久化.

日志持久化有兩種方式:

  • 配置日志的存儲目錄:
logging:
  file:
   path: logger/

我們刷新后就可以發(fā)現(xiàn)在logger這個目錄下出現(xiàn)了 Spring.log (日志文件的默認名稱)這個日志文件 (注意: logging.file.path: 只能設(shè)置日志文件的路徑,不能設(shè)置文件名稱)

即使我們重啟服務器,日志信息也不會消失

  • 配置日志路徑+名稱:
logging:
  file:
    name: logger/loggerInformation

注意: logging.file.name:不僅能設(shè)置日志文件的路徑,還能設(shè)置文件名稱

注意: logging.file.name 和 logging.file.path 兩個都配置的情況下, 只生效其? ,以 logging.file.name 為準.

2.4.3 配置日志文件分割

如果我們的?志都放在?個?件中,隨著項?的運?,?志?件會越來越?,需要對?志?件進?分割.

logging:
  file:
    name: logger/loggerInformation
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

注意:必須配合 logging.file.name  使用: ${LOG_FILE}  變量需要依賴 name  配置才能正確解析。

1. 日志文件超過1KB就分割(設(shè)置1KB是為了更好展示.企業(yè)開發(fā)通常設(shè)置為200M,500M等,此處沒 有明確標準)

 2. 分割后的日志文件名為:日志名.日期.索引

2.2.4 配置日志格式

?前?志打印的格式是默認的

打印?志的格式, 也是?持配置的. ?持控制臺和?志?件分別設(shè)置

配置說明:

1. 顏色渲染  %clr(表達式){顏色} 
- 作用:設(shè)置輸出日志的顏色,提升控制臺可讀性。
- 支持顏色: blue 、 cyan 、 faint 、 green 、 magenta 、 red 、 yellow 
- 示例: %clr(%5p){yellow} (將日志級別顯示為黃色)
2. 日期和時間  %d{...} 
- 作用:輸出日志產(chǎn)生的日期和時間,可精確到毫秒。
- 完整格式:
plaintext   
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}
- 說明:
- 先嘗試讀取系統(tǒng)屬性  LOG_DATEFORMAT_PATTERN 。
- 若該屬性不存在,則使用默認格式  yyyy-MM-dd'T'HH:mm:ss.SSSXXX (ISO8601 標準格式)。
- 可通過  System.getProperty("LOG_DATEFORMAT_PATTERN")  獲取系統(tǒng)屬性。
3. 日志級別  %5p 
-  %p :顯示日志級別( ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE )。
-  %5p :將級別名稱右對齊,固定占 5 個字符寬度,不足則用空格填充(如   INFO )。
-  %-5p :將級別名稱左對齊,固定占 5 個字符寬度,不足則用空格填充(如  INFO  )。
4. 上下文信息占位符
-  %t  /  %thread :線程名稱
-  %c :類的全限定名
-  %M :方法名
-  %L :行號
-  %m  /  %msg :日志輸出消息
-  %n :平臺無關(guān)的換行符
5. 寬度與截斷控制
-  %5 :字符長度小于 5 時,右邊用空格填充(右對齊)
-  %-5 :字符長度小于 5 時,左邊用空格填充(左對齊)
-  %.15 :字符長度超過 15 時,截去多余字符
-  %15.15 :字符長度小于 15 時右邊填充,超過 15 時截斷,固定 15 字符寬度

logging:
  file:
    name: logger/loggerInformation
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
  pattern:
    console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr([%15.15t]){magenta} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n"
    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"

如果設(shè)置了顏色,卻沒有生效? --- 需要配置,讓idea?持控制臺顏色顯式。操作如下:

在輸入框中輸入 -Dspring.output.ansi.enabled=ALWAYS ,再點擊 OK 并重啟即可

三. 更簡單的日志打印

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

lombok提供的 @Slf4j 會幫我們提供?個日志對象log,我們直接使用就可以.

步驟:

  • 引入lombok依賴
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <optional>true</optional>
</dependency>
  • 使用 @slf4j 注解輸出日志
@RestController
@Slf4j
public class LoggerController {
    @RequestMapping("/logger")
    public String logger(){
        log.trace("================= trace ===============");
        log.debug("================= debug ===============");
        log.info("================= info ===============");
        log.warn("================= warn ===============");
        log.error("================= error ===============");
        return "打印?志成功";
    }
}

到此這篇關(guān)于SpringBoot日志從調(diào)試到持久化的全解析的文章就介紹到這了,更多相關(guān)SpringBoot日志持久化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis標簽之Select?resultType和resultMap詳解

    MyBatis標簽之Select?resultType和resultMap詳解

    這篇文章主要介紹了MyBatis標簽之Select?resultType和resultMap,在MyBatis中有一個ResultMap標簽,它是為了映射select標簽查詢出來的結(jié)果集,下面使用一個簡單的例子,來介紹 resultMap 的使用方法,需要的朋友可以參考下
    2022-09-09
  • 解決java攔截器獲取POST入?yún)е翤RequestBody參數(shù)丟失問題

    解決java攔截器獲取POST入?yún)е翤RequestBody參數(shù)丟失問題

    文章講述了在Java開發(fā)中使用攔截器獲取POST請求入?yún)r,由于流關(guān)閉導致`@RequestBody`參數(shù)丟失的問題,并提出了一種解決方案,解決方案包括自定義方法、防止流丟失、過濾器和攔截器的合理組織和使用,最終確保了參數(shù)的正確傳遞
    2024-11-11
  • spring data jpa開啟批量插入、批量更新的問題解析

    spring data jpa開啟批量插入、批量更新的問題解析

    這篇文章主要介紹了spring data jpa開啟批量插入、批量更新問題,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,需要的朋友可以參考下
    2021-07-07
  • MyBatis 批量新增工具類實現(xiàn)示例

    MyBatis 批量新增工具類實現(xiàn)示例

    本文主要介紹了MyBatis批量操作工具類MyBatisBatchExecutorUtil,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-06-06
  • Java Condition類案例詳解

    Java Condition類案例詳解

    這篇文章主要介紹了Java Condition類案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個性修改SpringBoot項目的啟動banner的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Android 應用按返回鍵退向后臺運行實例代碼

    Android 應用按返回鍵退向后臺運行實例代碼

    這篇文章主要介紹了Android 應用按返回鍵退向后臺運行實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • JDBC中Statement的Sql注入問題詳解

    JDBC中Statement的Sql注入問題詳解

    這篇文章主要介紹了JDBC中Statement的Sql注入問題詳解,sql注入攻擊指的是通過構(gòu)建特殊的輸入作為參數(shù)傳入web應用程序,而這些輸入大都是sql語法里的一些組合,通過執(zhí)行sql語句進而執(zhí)行攻擊者所要做的操作,需要的朋友可以參考下
    2023-10-10
  • SpringBoot實現(xiàn)接口等冪次校驗的示例代碼

    SpringBoot實現(xiàn)接口等冪次校驗的示例代碼

    本文主要介紹了SpringBoot實現(xiàn)接口等冪次校驗的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java Web導出等比例圖片到Excel的實現(xiàn)過程

    Java Web導出等比例圖片到Excel的實現(xiàn)過程

    我們使用Java導出圖片到Excel,打開成功導出的Excel一看,商品對應的圖片都很規(guī)矩的按照我的設(shè)置鋪滿了整個單元格,但是,商品圖片卻都變形了,這樣肯定是不行的,于是第一反應就是將圖片等比例導出,所以本文本給大家介紹了如何使用Java Web導出等比例圖片到Excel
    2023-11-11

最新評論

乐山市| 诸城市| 来宾市| 瑞丽市| 云安县| 东丰县| 新郑市| 同德县| 利津县| 台北县| 高雄县| 沛县| 石门县| 沙田区| 固镇县| 惠东县| 尼木县| 青龙| 瓦房店市| 咸宁市| 海伦市| 西乌珠穆沁旗| 随州市| 汪清县| 灵石县| 乡城县| 德格县| 龙海市| 百色市| 剑川县| 新乡市| 雷波县| 石嘴山市| 威信县| 南涧| 双辽市| 孝感市| 兴义市| 东阿县| 屏山县| 丽水市|