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

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

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

一. 日志的用途

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

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

二. 日志使用

Spring Boot 項(xiàng)目在啟動(dòng)的時(shí)候默認(rèn)就有日志輸出,如下圖所示:

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

System.out.prin 打的日志:

使用日志對(duì)象打印對(duì)象:

@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 來(lái)輸出?志

2.1 打印日志

打印日志的步驟:

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

在程序中得到日志對(duì)象:

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

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

我們通常用 LoggerFactory.getLogger(當(dāng)前類.class)  來(lái)獲取日志對(duì)象,這個(gè)方法會(huì)根據(jù)傳入的類信息,生成一個(gè)與當(dāng)前類綁定的日志對(duì)象。

不同類獲取的日志對(duì)象,會(huì)在輸出日志時(shí)帶上自己類的名稱,方便你快速定位日志來(lái)源。(每個(gè)類都可以獲取屬于自己的獨(dú)立日志對(duì)象)

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

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

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

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 日志格式的說(shuō)明

當(dāng)我們?cè)谂渲梦募屑尤胍韵屡渲脮?huì)發(fā)生什么:

spring.application.name=logger

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

注意:該配置是我們?cè)趧?chuàng)建Spring Boot項(xiàng)目時(shí)自動(dòng)生成的 properties 配置文件中所自帶的配置項(xiàng)

2.3 日志級(jí)別

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

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

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

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

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

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

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

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

日志級(jí)別的順序:

針對(duì)這些級(jí)別, Logger 對(duì)象分別提供了對(duì)應(yīng)的?法,來(lái)輸出?志.,代碼如下所示:

@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 級(jí)別的日志沒有被打印---這與?志級(jí)別的配置有關(guān),?志的輸出級(jí)別默認(rèn)是 info級(jí)別(下面的內(nèi)容中會(huì)講到如何配置), 所以只會(huì)打印?于等于此級(jí)別的?志,也就 是 info , warn 和 error.

2.4 日志配置

2.4 1 配置日志級(jí)別

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

logging:
  level:
    root: trace
 

加上這個(gè)配置后,所有trace級(jí)別的日志后,與它同級(jí)及高于此級(jí)的日志都可以打印出來(lái)了

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

logging:
  level:
    root: debug
    logger: info #logger為當(dāng)前項(xiàng)目下的一個(gè)包名

2.4.2 日志持久化

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

日志持久化有兩種方式:

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

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

即使我們重啟服務(wù)器,日志信息也不會(huì)消失

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

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

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

2.4.3 配置日志文件分割

如果我們的?志都放在?個(gè)?件中,隨著項(xiàng)?的運(yùn)?,?志?件會(huì)越來(lái)越?,需要對(duì)?志?件進(jìn)?分割.

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等,此處沒 有明確標(biāo)準(zhǔn))

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

2.2.4 配置日志格式

?前?志打印的格式是默認(rèn)的

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

配置說(shuō)明:

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

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

三. 更簡(jiǎn)單的日志打印

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

lombok提供的 @Slf4j 會(huì)幫我們提供?個(gè)日志對(duì)象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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis標(biāo)簽之Select?resultType和resultMap詳解

    MyBatis標(biāo)簽之Select?resultType和resultMap詳解

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

    解決java攔截器獲取POST入?yún)?dǎo)致@RequestBody參數(shù)丟失問題

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

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

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

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

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

    Java Condition類案例詳解

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

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個(gè)性修改SpringBoot項(xiàng)目的啟動(dòng)banner的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Android 應(yīng)用按返回鍵退向后臺(tái)運(yùn)行實(shí)例代碼

    Android 應(yīng)用按返回鍵退向后臺(tái)運(yùn)行實(shí)例代碼

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

    JDBC中Statement的Sql注入問題詳解

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

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

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

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

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

最新評(píng)論

东兰县| 阳新县| 湖北省| 香河县| 五常市| 武夷山市| 宁化县| 洪江市| 招远市| 巴中市| 萝北县| 临漳县| 仙游县| 句容市| 江口县| 开封市| 大埔县| 玛纳斯县| 双辽市| 巨鹿县| 仁布县| 康定县| 分宜县| 温泉县| 新宁县| 东乡| 大渡口区| 抚顺市| 榕江县| 宁远县| 离岛区| 栾川县| 叶城县| 哈尔滨市| 松溪县| 保定市| 庆云县| 南宁市| 夏河县| 永济市| 平湖市|