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

Spring Boot 日志配置與常見問題及解決方案

 更新時間:2025年04月28日 10:49:40   作者:權(quán)^  
在軟件開發(fā)中,日志記錄是理解應(yīng)用程序行為、定位問題和確保合規(guī)性的重要工具,Spring Boot 提供了靈活的日志配置機制,幫助開發(fā)者高效地監(jiān)控和分析應(yīng)用,本文將介紹如何配置 Spring Boot 的日志,解決常見問題,并提供實用建議,感興趣的朋友一起看看吧

Spring Boot 日志配置與常見問題解析

引言

在軟件開發(fā)中,日志記錄是理解應(yīng)用程序行為、定位問題和確保合規(guī)性的重要工具。Spring Boot 提供了靈活的日志配置機制,幫助開發(fā)者高效地監(jiān)控和分析應(yīng)用。本文將介紹如何配置 Spring Boot 的日志,解決常見問題,并提供實用建議。

什么是日志?

日志記錄程序在運行過程中產(chǎn)生的各種信息,包括錯誤、警告、信息和調(diào)試級別。日志文件可以幫助開發(fā)者快速定位問題、跟蹤應(yīng)用程序行為,并滿足合規(guī)性要求。
隨著項目的復(fù)雜度提升, 我們對日志的打印也有了更高的需求, 而不僅僅是定位排查問題.
比如需要記錄?些用戶的操作記錄(?些審計公司會要求), 也可能需要使用日志來記錄用戶的?些喜好,
把日志持久化, 后續(xù)進(jìn)行數(shù)據(jù)分析等. 但是 System.out.print 不能很好的滿足我們的需求, 我們就需要使用?些專門的日志框架。

日志的重要性

  • 快速定位問題:通過分析日志,開發(fā)者可以迅速定位應(yīng)用程序中的錯誤或性能問題。
  • 確保合規(guī)性:許多行業(yè)要求應(yīng)用程序符合特定標(biāo)準(zhǔn),日志記錄了應(yīng)用程序的運行狀態(tài),便于審計和合規(guī)性檢查。
  • 提高開發(fā)效率:日志記錄了應(yīng)用程序的歷史行為,有助于快速復(fù)現(xiàn)問題并優(yōu)化代碼。

我們知道日志主要是為了發(fā)現(xiàn)問題, 分析問題, 定位問題的, 但除此之外, 日志還有很多用途:
1. 系統(tǒng)監(jiān)控
監(jiān)控現(xiàn)在幾乎是?個成熟系統(tǒng)的標(biāo)配, 我們可以通過日志記錄這個系統(tǒng)的運行狀態(tài), 每一個方法的響應(yīng)時間, 響應(yīng)狀態(tài)等, 對數(shù)據(jù)進(jìn)行分析, 設(shè)置不同的規(guī)則, 超過閾值時進(jìn)行報警. 比如統(tǒng)計日志中關(guān)鍵字的數(shù)量,并在關(guān)鍵字?jǐn)?shù)量達(dá)到?定條件時報警,這也是日志的常見需求之一
2. 數(shù)據(jù)采集
數(shù)據(jù)采集是?個比較大的范圍, 采集的數(shù)據(jù)可以作用在很多方面, 比如數(shù)據(jù)統(tǒng)計, 推薦排序等.
• 數(shù)據(jù)統(tǒng)計: 統(tǒng)計頁面的瀏覽量(PV), 訪客量(UV), 點擊量等, 根據(jù)這些數(shù)據(jù)進(jìn)行數(shù)據(jù)分析, 優(yōu)化公司運營策略
• 推薦排序: 目前推薦排序應(yīng)用在各個領(lǐng)域, 我們經(jīng)常接觸的各行各業(yè)很多也都涉及推薦排序, 比如購物, 廣告, 新聞等領(lǐng)域. 數(shù)據(jù)采集是推薦排序工作中必須做的一環(huán), 系統(tǒng)通過日志記錄用戶的瀏覽歷史, 停留時長等, 算法?員通過分析這些數(shù)據(jù), 訓(xùn)練模型, 給用戶做推薦。
下圖中的數(shù)據(jù)源, 其中?部分就來自于日志記錄的數(shù)據(jù)

3. 日志審計
隨著互聯(lián)網(wǎng)的發(fā)展,眾多企業(yè)的關(guān)鍵業(yè)務(wù)越來越多的運行于網(wǎng)絡(luò)之上. 網(wǎng)絡(luò)安全越來越受到大家的關(guān)注, 系統(tǒng)安全也成為了項目中的?個重要環(huán)節(jié), 安全審計也是系統(tǒng)中非常重要的部分. 國家的政策法規(guī)、行業(yè)標(biāo)準(zhǔn)等都明確對日志審計提出了要求. 通過系統(tǒng)日志分析,可以判斷?些非法攻擊, 非法調(diào)用,以及系統(tǒng)處理過程中的安全隱患。

比如, 運營系統(tǒng), 其中運營?員在通過界?處理?些數(shù)據(jù)的時候, 如果沒有清楚的日志操作記錄, ?條數(shù)據(jù)被刪除或者修改, 你是無法找到是誰操作的,但是如果你做了相應(yīng)的記錄,該數(shù)據(jù)被誰刪除或者修改就會一目了然.
還有?些內(nèi)部的違規(guī)和信息泄漏(比如客戶信息被賣掉)現(xiàn)象出現(xiàn)后, 如果未記錄留存日志 為事后調(diào)查提供依據(jù), 則事后很難追查(?些公司查看客戶的信息都會被記錄日志, 如果頻繁查詢也會報警。

日志使用

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

那么這個日志跟System.out.print有什么區(qū)別呢?

@RestController
@RequestMapping("/logger")
public class loggerController {
 @RequestMapping("/log")
    public String log(){
     System.out.println("打印日志");
     return "打印日志";
 }
}

可以看到:

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

打印日志

1.在程序中得到打印日志對象

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

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

日志對象的打印方法有很多種,我們可以先使用 info() 方法來輸出日志

@RestController
@RequestMapping("/logger")
public class loggerController {
  private Logger logger= LoggerFactory.getLogger(loggerController.class);
    @RequestMapping("/log")
    public String log(){
        logger.info("====日志內(nèi)容=====");
        return "打印日志";
    }
}

效果:

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/d6f3103da41e46c99e5a6fb3b049e8db.png

使用注解打印日志 – @Slf4j
添加 lombok 依賴:

        <dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
@Slf4j
@RestController
public class LogController {
 public void log(){
 log.info("--------------要輸出?志的內(nèi)容----------------");
 }
}

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

日志框架介紹

1.門面模式(外觀模式)
定義:

門面模式(Facade Pattern)?稱為外觀模式, 提供了一個統(tǒng)?的接口, ?來訪問?系統(tǒng)中的?群接口.
其主要特征是定義了?個高層接口, 讓子系統(tǒng)更容易使用。

門面模式主要包含2種角色:
外觀角色(Facade): 也稱門面角色,系統(tǒng)對外的統(tǒng)?接口.
子系統(tǒng)角色(SubSystem): 可以同時有?個或多個 SubSystem. 每個 SubSytem 都不是?個單獨的類,而是?個類的集合. SubSystem 并不知道 Facade 的存在, 對于 SubSystem 而言, Facade 只是另?個客戶端而已(即 Facade 對 SubSystem 透明)

比如去醫(yī)院看病,可能要去掛號, 門診, 化驗, 取藥, 讓患者或患者家屬覺得很復(fù)雜, 如果有提供接待人員, 只讓接待?員來處理, 就很方便。

門面模式的優(yōu)點
• 減少了系統(tǒng)的相互依賴. 實現(xiàn)了客戶端與子系統(tǒng)的耦合關(guān)系, 這使得子系統(tǒng)的變化不會影響到調(diào)用它的客戶端;
• 提高了靈活性, 簡化了客戶端對子系統(tǒng)的使用難度, 客戶端無需關(guān)心子系統(tǒng)的具體實現(xiàn)方式, 而只需要和門面對象交互即可.
• 提高了安全性. 可以靈活設(shè)定訪問權(quán)限, 不在門面對象中開通方法, 就無法訪問

日志格式的說明

那打印的日志是什么呢?

從上圖可以看到,日志輸出內(nèi)容元素具體如下(從左往右):

時間日期:精確到毫秒日志級別:ERROR, WARN, INFO, DEBUG 或TRACE進(jìn)程ID線程名Logger名(通常使用源代碼的類名)日志內(nèi)容

?志級別

日志級別代表著?志信息對應(yīng)問題的嚴(yán)重性, 為了更快的篩選符合目標(biāo)的日志信息.
試想一下這樣的場景,假設(shè)你是?家 2 萬人公司的老板, 如果每個員工的日常工作和瑣碎的信息都要反饋給你, 那你?定無暇顧及. 于是就有了組織架構(gòu),而組織架構(gòu)就會分級,有很多的級別設(shè)置,如下圖所示:

有了組織架構(gòu)之后,就可以逐級別匯報消息了, 例如:組員匯報給組長, 組長匯報給研發(fā)?組, 研發(fā)?組匯報給 Java 研發(fā), 等等依次進(jìn)行匯報.
日志級別大概是同樣的道理,有了日志級別之后就可以過濾自己想看到的信息了, 比如只關(guān)注error級別的, 就可以根據(jù)級別過濾出來error級別的日志信息, 節(jié)約開發(fā)者的信息篩選時間。

日志級別的分類

1.Error
嚴(yán)重性問題或錯誤,常用于捕捉不可恢復(fù)的錯誤或異常
2.Warning
警告性信息,常用于提醒可能的問題或性能優(yōu)化建議
3.Info
一般信息或狀態(tài)更新,常用于提供程序運行的基本信息
4.Debug
詳細(xì)調(diào)試信息,常用于調(diào)試過程中使用的調(diào)試信息
TRACE: 追蹤信息, 比DEBUG更細(xì)粒度的信息事件(除非有特殊用意,否則請使用DEBUG級別替代)
5.FATAL
致命信息,表示需要立即被處理的系統(tǒng)級錯誤。
6.error
錯誤信息, 級別較高的錯誤日志信息, 但仍然不影響系統(tǒng)的繼續(xù)運行。

日志級別的使用

日志級別是開發(fā)?員自己設(shè)置的. 開發(fā)人員根據(jù)自己的理解來判斷該信息的重要程度。

類似公司管理, 通常由領(lǐng)導(dǎo)來判斷什么樣的事情需要匯報, 什么樣的事情不需要匯報。

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

@RestController
@RequestMapping("/logger")
public class loggerController {
  private Logger logger= LoggerFactory.getLogger(loggerController.class);
  //打印不同級別的日志
    @RequestMapping("/log")
    public String log(){
        logger.info("====日志內(nèi)容=====");
        logger.trace("====日志內(nèi)容=====");
        logger.debug("====日志內(nèi)容=====");
        logger.error("====日志內(nèi)容=====");
        logger.warn("====日志內(nèi)容=====");
        return "打印日志";
    }
}

SpringBoot 默認(rèn)的日志框架是Logback, Logback沒有 FATAL 級別, 它被映射到 ERROR .
出現(xiàn)fatal日志,表示服務(wù)已經(jīng)出現(xiàn)了某種程度的不可用, 需要需要系統(tǒng)管理員緊急介?處理. 通常情況下, ?個進(jìn)程生命周期中應(yīng)該最多只有一次FATAL記錄.

結(jié)果發(fā)現(xiàn), 只打印了info, warn和error級別的?志
這與日志級別的配置有關(guān), ?志的輸出級別默認(rèn)是 info級別, 所以只會打印大于等于此級別的日志, 也就是info, warn和error。

Spring Boot 日志配置

日志級別配置只需要在配置?件中設(shè)置"logging.level"配置項即可。

1. 設(shè)置日志級別和格式

application.properties 文件中,可以設(shè)置日志級別、格式和輸出渠道。常用配置如下:

  • 日志級別spring.applog enabled=true(啟用日志記錄)
  • 日志級別spring.applog level=debug(啟用調(diào)試級別日志)
  • 日志格式spring.applog format=com.example.MyApplication>${request-global-start}\n(自定義日志格式)
  • 輸出渠道spring.applog channel=applog收集器(指定日志收集器)

properties 和yml只需要配置其中?個即可

?者轉(zhuǎn)換方法: Properties文件的點( . ) 對應(yīng)yml文件中的換行

2. 配置日志收集器

使用 ELK Stack(Elasticsearch, Logstash, Kibana)等工具可以將日志高效收集到云存儲中,并進(jìn)行分析。ELK Stack 是常用的日志分析工具,適用于大數(shù)據(jù)量的日志。

3. 查看和分析日志

配置完成后,可以通過以下命令查看日志:

  • logrotate:收集和旋轉(zhuǎn)日志文件,確保存儲空間有限時自動刪除舊日志。
  • tail -f:實時查看日志文件的末尾部分。

4.日志的持久化

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

日志持久化有兩種方式:

  • 配置日志文件名
  • 配置日志的存儲目錄

配置日志文件名:

yml配置

logging:
  file:
    name: log/log.log

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

配置日志的保存路徑
yml

logging:
  file:
    path:d/loggeController

可以看到日志在這個路徑下面了。

5.設(shè)置日志的顏色

需要設(shè)置idea,讓控制臺中的日志有顏色

1.打開啟動配置, 添加VM options
輸入:

-Dspring.output.ansi.enabled=ALWAYS

重新啟動程序。

可以看到已經(jīng)變顏色了。

常見日志問題及解決方法

1. 日志配置文件找不到

問題:日志配置文件(如 application.properties)未找到或配置錯誤。

解決方法

  • 檢查 application.properties 文件是否存在。
  • 確保文件路徑正確,例如在 src/main/resourcesapplication.conf 中。
  • 使用 mvn clean install 重新構(gòu)建項目以確保配置文件被正確配置。

2. 日志文件輸出到錯誤的地方

問題:日志文件被輸出到不可見或錯誤的目錄,導(dǎo)致日志無法查看。

解決方法

  • 檢查日志收集器的配置,確保輸出目錄正確。
  • 使用 mvn clean install 重新構(gòu)建項目以確保配置文件被正確配置。

3. 日志級別設(shè)置錯誤

問題:日志級別設(shè)置過高或過低,導(dǎo)致日志內(nèi)容被截斷或顯示不全。

解決方法

  • 檢查 application.properties 中的 spring.applog level 設(shè)置,確保級別正確。
  • 默認(rèn)級別為 spring.applog level=error,可以調(diào)整為 warning、noticedebug

4. 日志文件找不到

問題:日志文件無法找到,導(dǎo)致日志記錄失敗。

解決方法

  • 確保日志收集器配置正確,路徑和文件名無誤。
  • 檢查日志文件的權(quán)限,確保應(yīng)用程序有權(quán)限寫入目標(biāo)目錄。
  • 使用 mvn clean install 重新構(gòu)建項目以確保配置文件被正確配置。

總結(jié)

配置 Spring Boot 的日志有助于開發(fā)者更好地監(jiān)控和分析應(yīng)用程序。通過合理設(shè)置日志級別、格式和收集器,可以確保日志的完整性和有效性。遇到日志相關(guān)問題時,首先檢查配置文件和日志收集器的配置,確保日志正常輸出。如果問題依然存在,可以嘗試重新構(gòu)建項目或使用日志調(diào)試工具進(jìn)一步排查問題。通過正確的日志配置和分析,開發(fā)者可以更高效地解決問題,提升應(yīng)用程序的穩(wěn)定性和性能。

  • 日志是程序中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,Spring Boot 內(nèi)容了日志框架,默認(rèn)情況下使用的是 info 日志級別將日志輸出到控制臺的,我們可以通過 lombok 提供的
  • @Slf4j 注解和 log 對象快速的打印自定義日志.
  • 日志包含 6 個級別, 日志級別越高,收到的日志信息也就越少,我們可以通過配置日志的保存名稱或保存目錄來將日志持久化。

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

相關(guān)文章

  • Spring Boot單元測試中使用mockito框架mock掉整個RedisTemplate的示例

    Spring Boot單元測試中使用mockito框架mock掉整個RedisTemplate的示例

    今天小編就為大家分享一篇關(guān)于Spring Boot單元測試中使用mockito框架mock掉整個RedisTemplate的示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 關(guān)于springboot2.4跨域配置問題

    關(guān)于springboot2.4跨域配置問題

    這篇文章主要介紹了springboot2.4跨域配置的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • jpanel設(shè)置背景圖片的二個小例子

    jpanel設(shè)置背景圖片的二個小例子

    這篇文章主要介紹了jpanel設(shè)置背景圖片的二個小例子,實現(xiàn)了動態(tài)加載圖片做背景的方法,需要的朋友可以參考下
    2014-03-03
  • Springboot網(wǎng)站第三方登錄 微信登錄

    Springboot網(wǎng)站第三方登錄 微信登錄

    這篇文章主要為大家詳細(xì)介紹了Springboot網(wǎng)站第三方登錄 ,微信登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • springboot?sleuth?日志跟蹤問題記錄

    springboot?sleuth?日志跟蹤問題記錄

    Spring?Cloud?Sleuth是一個在應(yīng)用中實現(xiàn)日志跟蹤的強有力的工具,使用Sleuth庫可以應(yīng)用于計劃任務(wù)?、多線程服務(wù)或復(fù)雜的Web請求,尤其是在一個由多個服務(wù)組成的系統(tǒng)中,這篇文章主要介紹了springboot?sleuth?日志跟蹤,需要的朋友可以參考下
    2023-07-07
  • Java基于遞歸解決全排列問題算法示例

    Java基于遞歸解決全排列問題算法示例

    這篇文章主要介紹了Java基于遞歸解決全排列問題算法,結(jié)合實例形式分析了Java使用遞歸算法解決全排列問題的原理與具體實現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • 關(guān)于Java 并發(fā)的 CAS

    關(guān)于Java 并發(fā)的 CAS

    后端開發(fā)鎖成為一個不可避免的話題,今天我們討論的是與之對應(yīng)的無鎖 CAS。本文會從怎么來的、是什么、怎么用、原理分析、遇到的問題等不同的角度帶你真正搞懂 CAS。
    2021-09-09
  • nacos(SpringCloud)配置加載過程

    nacos(SpringCloud)配置加載過程

    Nacos是Spring Cloud的配置中心,通過BootstrapApplicationListener和ConfigFileApplicationListener監(jiān)聽器加載配置文件,并通過PropertySourceBootstrapConfiguration將Nacos配置加載到Spring Boot應(yīng)用的environment中
    2024-12-12
  • 淺析Java中如何處理接口返回的JSON數(shù)據(jù)

    淺析Java中如何處理接口返回的JSON數(shù)據(jù)

    在?Java?里處理接口返回的?JSON,最常用的是?Jackson?或?Gson?這兩個庫,下面小編將用最簡單,最實用的方式教你,快跟隨小編一起學(xué)習(xí)一下吧
    2026-04-04
  • Spring?AOP?創(chuàng)建代理對象詳情

    Spring?AOP?創(chuàng)建代理對象詳情

    這篇文章介紹了Spring?AOP?創(chuàng)建代理對象詳情,主要介紹AOP?創(chuàng)建代理對象和上下文相關(guān)的內(nèi)容,下文分享具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05

最新評論

乃东县| 石家庄市| 麦盖提县| 桦川县| 鹤峰县| 县级市| 宁化县| 丰宁| 三亚市| 黄冈市| 昔阳县| 花垣县| 永济市| 五原县| 璧山县| 威信县| 张家口市| 陇川县| 顺昌县| 上思县| 革吉县| 长白| 年辖:市辖区| 淄博市| 洛宁县| 咸宁市| 临城县| 历史| 阜新| 菏泽市| 光泽县| 荣昌县| 鄂托克旗| 兴化市| 中阳县| 卓尼县| 罗甸县| 北碚区| 拜城县| 汕头市| 广汉市|