做pc端網(wǎng)站咨詢南京seo公司
💓 博客主頁:從零開始的-CodeNinja之路
? 收錄文章:【Spring Boot】深入解密Spring Boot日志:最佳實(shí)踐與策略解析
🎉歡迎大家點(diǎn)贊👍評論📝收藏?文章
目錄
- Spring Boot 日志
- 一. 日志的概念?
- 二. 日志
- 2.1 日志的格式
- 2.2 日志級別
- 2.3 日志的使用
- 三. 門面模式(外觀模式)
- 四. SLF4J框架
- 總結(jié)
Spring Boot 日志
一. 日志的概念?
日志對我們來說并不陌?,通過打印日志來發(fā)現(xiàn)和定位問題,或者根據(jù)日志來分析程序的運(yùn)行過程.
日志的用途
Spring Boot中的日志管理是非常重要的,它可以幫助開發(fā)人員在應(yīng)用程序運(yùn)行時(shí)跟蹤問題、監(jiān)控性能并記錄關(guān)鍵信息。通過配置適當(dāng)?shù)娜罩炯墑e和輸出格式,開發(fā)人員可以更好地理解應(yīng)用程序的行為并快速定位和解決問題。Spring Boot提供了靈活且強(qiáng)大的日志管理功能,使開發(fā)人員能夠輕松地集成和配置各種日志框架,如Logback、Log4j2等,以滿足不同項(xiàng)目的需求。
二. 日志
2.1 日志的格式
從上圖可以看到,日志輸出內(nèi)容元素具體如下:
- 時(shí)間日期:精確到毫秒
- 日志級別:ERROR,WARN,INFO,DEBUG或TRACE
- 進(jìn)程ID
- 線程名
- Logger名(通常使用源代碼的類名)
- 日志內(nèi)容
2.2 日志級別
日志級別代表著日志信息對應(yīng)問題的嚴(yán)重性,為了更快的篩選符合?標(biāo)的日志信息.
日志的級別從高到低依次為:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
- FATAL:致命信息,表示需要立即被處理的系統(tǒng)級錯誤.
- ERROR:錯誤信息,級別較?的錯誤日志信息,但仍然不影響系統(tǒng)的繼續(xù)運(yùn)行
- WARN:警告信息,不影響使用,但需要注意的問題
- INFO:普通信息,用于記錄應(yīng)用程序正常運(yùn)行時(shí)的?些信息,例如系統(tǒng)啟動完成、請求處理完成等.
- DEBUG:調(diào)試信息,需要調(diào)試時(shí)候的關(guān)鍵信息打印.
- TRACE:追蹤信息,比DEBUG更細(xì)粒度的信息事件(除非有特殊?意,否則請使用DEBUG級別替代)
日志級別的順序:
級別越高,收到的消息越少
2.3 日志的使用
SpringBoot內(nèi)置了日志框架 Slf4j ,我們可以直接調(diào)用 Slf4j 來輸出日志
添加lombok依賴
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
輸出?志
lombok提供的 @Slf4j 會幫我們提供?個(gè)日志對象log,我們直接使用就可以.
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestControllerpublic class LogController {public void log(){log.info("--------------要輸出?志的內(nèi)容----------------");}
}
三. 門面模式(外觀模式)
SLF4J是門面模式的典型應(yīng)用(但不僅僅使?了門面模式).SLF4J不同于其他日志框架,它不是?個(gè)真正的日志實(shí)現(xiàn),而是?個(gè)抽象層,對日志框架制定的?種規(guī)范,標(biāo)準(zhǔn),接口.所有SLF4J并不能獨(dú)?使用,需要和具體的日志框架配合使用.
門面模式定義
門面模式(FacadePattern)?稱為外觀模式,提供了?個(gè)統(tǒng)?的接口,用來訪問子系統(tǒng)中的?群接口.
其主要特征是定義了?個(gè)高層接口,讓子系統(tǒng)更容易使用.
原文:Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigherlevelinterfacethatmakesthesubsystemeasiertouse.
解釋:要求?個(gè)?系統(tǒng)的外部與其內(nèi)部的通信必須通過?個(gè)統(tǒng)?的對象進(jìn)?.門面模式提供?個(gè)?層 次的接?,使得?系統(tǒng)更易于使?.
門面模式主要包含2種角色: 外觀角色(Facade):也稱門面角色,系統(tǒng)對外的統(tǒng)?接口. 子系統(tǒng)角色(SubSystem):可以同時(shí)有?個(gè)或多個(gè)SubSystem.每個(gè)SubSytem都不是?個(gè)單獨(dú)的類, 而是?個(gè)類的集合.SubSystem并不知道Facade的存在,對于SubSystem而?,Facade只是另?個(gè) 客戶端而已(即Facade對SubSystem透明)
?如去醫(yī)院看病,可能要去掛號,門診,化驗(yàn),取藥,讓患者或患者家屬覺得很復(fù)雜,如果有提供接待?
員,只讓接待?員來處理,就很方便.
門面模式的實(shí)現(xiàn)
場景:回家,我們會開各個(gè)屋的燈.離開家時(shí),會關(guān)閉各個(gè)屋的燈 如果家?設(shè)置?個(gè)總開關(guān),來控制整個(gè)屋的燈就會很方便.
門面模式的優(yōu)點(diǎn)
? 減少了系統(tǒng)的相互依賴.實(shí)現(xiàn)了客戶端與子系統(tǒng)的耦合關(guān)系,這使得子系統(tǒng)的變化不會影響到調(diào)?它
的客戶端;
? 提高了靈活性,簡化了客戶端對子系統(tǒng)的使用難度,客戶端無需關(guān)心子系統(tǒng)的具體實(shí)現(xiàn)方式,而只需
要和門面對象交互即可.
? 提高了安全性.可以靈活設(shè)定訪問權(quán)限,不在門面對象中開通?法,就無法訪問
四. SLF4J框架
SLF4J就是其他日志框架的門面.SLF4J可以理解為是提供日志服務(wù)的統(tǒng)?API接?,并不涉及到具體的
日志邏輯實(shí)現(xiàn).
不引入日志門面
常見的日志框架有l(wèi)og4J,logback等.如果?個(gè)項(xiàng)目已經(jīng)使用了log4j,而你依賴的另?個(gè)類庫,假如是
ApacheActiveMQ,它依賴于另外?個(gè)日志框架logback,那么你就需要把logback也加載進(jìn)去.
存在問題:
- 不同日志框架的API接?和配置?件不同,如果多個(gè)日志框架共存,那么不得不維護(hù)多套配置?件(這
個(gè)配置?件是指用戶?定義的配置?件). - 如果要更換日志框架,應(yīng)用程序?qū)⒉坏貌恍薷拇a,并且修改過程中可能會存在?些代碼沖突.
- 如果引?的第三?框架,使用了多套,那就不得不維護(hù)多套配置.
引入日志門面
引?門面日志框架之后,應(yīng)?程序和日志框架(框架的具體實(shí)現(xiàn))之間有了統(tǒng)?的API接?(門面日志框架
實(shí)現(xiàn)),此時(shí)應(yīng)?程序只需要維護(hù)?套日志?件配置,且當(dāng)?shù)讓訉?shí)現(xiàn)框架改變時(shí),也不需要更改應(yīng)?程序代
碼
SLF4J就是這個(gè)日志門面.
總的來說,SLF4J使你的代碼獨(dú)立于任意?個(gè)特定的日志API,這是?個(gè)對于開發(fā)API的開發(fā)者很好的思
想.
總結(jié)
- 日志是程序中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,SpringBoot內(nèi)容了日志框
架,默認(rèn)情況下使用的是info日志級別將日志輸出到控制臺的,我們可以通過lombok提供的
@Slf4j 注解和 log 對象快速的打印自定義日志. - 日志包含6個(gè)級別,日志級別越高,收到的日志信息也就越少,我們可以通過配置日志的保存名稱
或保存目錄來將日志持久化