Spring Boot日志的打印與持久化詳細(xì)解析
1. 日志有什么用
日志是程序的重要組成部分,想象一下,如果程序報(bào)錯(cuò)了,不讓你打開(kāi)控制臺(tái)看日志,那么你能找到報(bào)錯(cuò)的原因嗎?
答案是否定的,寫(xiě)程序不是買(mǎi)彩票,不能完全靠猜,因此日志對(duì)應(yīng)我們來(lái)說(shuō),最重要的用途就是排除和定位問(wèn)題。
除了發(fā)現(xiàn)和定位問(wèn)題之外,我們還可以通過(guò)日志實(shí)現(xiàn)以下功能:
- 記錄用戶(hù)登錄日志,方便分析用戶(hù)正常登錄還是惡意破解用戶(hù)
- 記錄系統(tǒng)的操作日志,方便數(shù)據(jù)恢復(fù)和定位操作人
- 記錄程序的執(zhí)行實(shí)現(xiàn),方便以后優(yōu)化程序提供數(shù)據(jù)支持
2. 日志怎么用
Spring Boot 項(xiàng)目在啟動(dòng)的時(shí)候默認(rèn)就有日志輸出,如下圖所示:

以上內(nèi)容就是 Spring Boot 輸出的控制臺(tái)日志信息。
通過(guò)上述日志信息我們可以發(fā)現(xiàn)以下3個(gè)問(wèn)題:
- Spring Boot 內(nèi)置了日志框架(不然也輸出不了日志)
- 默認(rèn)情況下,輸出的?志并?是開(kāi)發(fā)者定義和打印的,那開(kāi)發(fā)者怎么在程序中?定義打印?志呢?
- ?志默認(rèn)是打印在控制臺(tái)上的,?控制臺(tái)的?志是不能被保存的,那么怎么把?志永久的保存下來(lái) 呢?
下面我們一起來(lái)找尋這些問(wèn)題的答案。
3. Spring Boot 自定義日志的打印
- 在一個(gè)類(lèi)中先獲取到打印日志對(duì)象(日志框架提供的日志對(duì)象,而日志框架默認(rèn)已經(jīng)集成到 Spring Boot 里了)
- 使用日志對(duì)象提供的方法實(shí)現(xiàn)日志的打印
3.1 先獲取到打印日志對(duì)象
在程序中獲取日志對(duì)象需要使用日志工廠 LoggerFactory,如下代碼所示:
// 1.先得到日志對(duì)象(來(lái)自 slf4j)
private static final Logger log =
LoggerFactory.getLogger(UserController.class);
日志工廠需要將每個(gè)類(lèi)的類(lèi)型傳遞進(jìn)去,這樣我們才知道日志的歸屬類(lèi),才能更方便,更直觀的定位到問(wèn)題類(lèi)。
注意:Logger 對(duì)象是屬于 org.slf4j 包下的,不要導(dǎo)入錯(cuò)誤。

因?yàn)?Spring Boot 中內(nèi)置了日志框架 slf4j,所以 咋們可以直接在程序中調(diào)用 slf4j 來(lái)輸出日志
3.2 使用日志對(duì)象打印日志
日志對(duì)象的打印方法有很多,我們可以先使用 info() 方法來(lái)輸出日志,如下代碼所示:
// 2.使用日志對(duì)象提供的打印方法進(jìn)行日志打印
log.trace("我是 trace");
log.debug("我是 debug");
log.info("我是 info");
log.warn("我是 warn");
log.error("我是 error");
打印效果展示:

3.3 日志格式說(shuō)明

4. 日志級(jí)別


5. 日志持久化(將日志永久的保存到磁盤(pán)的某個(gè)位置)
以上的?志都是輸出在控制臺(tái)上的,然?在?產(chǎn)環(huán)境上咱們需要將?志保存下來(lái),以便出現(xiàn)問(wèn)題之后追 溯問(wèn)題,把?志保存下來(lái)的過(guò)程就叫做持久化。
想要將?志進(jìn)?持久化,只需要在配置?件中指定?志的存儲(chǔ)?錄或者是指定?志保存?件名之后, Spring Boot 就會(huì)將控制臺(tái)的?志寫(xiě)到相應(yīng)的?錄或?件下了。
設(shè)置日志的保存路徑
在配置文件中,輸入如下代碼:
# 設(shè)置日志的保存路徑
# 正確設(shè)置日志路徑的方式1
logging.file.path=D:/JavaCode/
# 正確設(shè)置日志路徑的方式2
logging.file.path=D:\\JavaCode\\
保存后:

注意:
logging.file.path=D:\JavaCode\
這種寫(xiě)法,Spring Boot 會(huì)認(rèn)為是一個(gè)特殊字符,而非目錄,所以日志持久化不會(huì)成功。
6. 更簡(jiǎn)單的日志輸出—lombok
每次都使用 LoggerFactory.getLogger(xxx.class) 很繁瑣,而且每個(gè)類(lèi)都要添加一遍,也很麻煩,這里有種更好的日志輸出方式,使用 lombok 來(lái)更簡(jiǎn)單的輸出。
- 添加 lombok 框架支持
- 使用 @slf4j 注解輸出日志
6.1 添加 lombok 到當(dāng)前項(xiàng)目
1.在 pom.xml 中先刪除已有的 lombok 依賴(lài)
2.下載插件

下載好之后,手動(dòng)引入 lombok 依賴(lài)


6.2 使用 @Slf4j 得到日志對(duì)象 log
@Controller
@ResponseBody
@Slf4j // 替代了之前需要通過(guò) LoggerFactory.getLogger 操作
public class UserService {
@RequestMapping("/sayhi2")
public void sayHi2() {
log.trace("我是 trace");
log.debug("我是 debug");
log.info("我是 info");
log.warn("我是 warn");
log.error("我是 error");
}
}
控制臺(tái)打印結(jié)果如下:

總結(jié)
?志是程序中的重要組成部分,使??志可以快速的發(fā)現(xiàn)和定位問(wèn)題,Spring Boot 內(nèi)容了?志框架, 默認(rèn)情況下使?的是 info ?志級(jí)別將?志輸出到控制臺(tái)的,我們可以通過(guò) lombok 提供的 @Slf4j 注解 和 log 對(duì)象快速的打印?定義?志,?志包含 6 個(gè)級(jí)別:
- trace:微量,少許的意思,級(jí)別最低;
- info:普通的打印信息;
- debug:需要調(diào)試時(shí)候的關(guān)鍵信息打??;
- warn:警告,不影響使?,但需要注意的問(wèn)題;
- error:錯(cuò)誤信息,級(jí)別較?的錯(cuò)誤?志信息;
- fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)?的事件。
?志級(jí)別依次提升,??志界別越?,收到的?志信息也就越少,我們可以通過(guò)配置?志的保存名稱(chēng)或 保存?錄來(lái)將?志永久地保存下來(lái)。
到此這篇關(guān)于Spring Boot日志的打印與持久化詳細(xì)解析的文章就介紹到這了,更多相關(guān)Spring Boot日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
navicatdesignquery.sql.bak系統(tǒng)找不到指定路徑錯(cuò)誤的解決方法
今天小編就為大家分享一篇關(guān)于navicatdesignquery.sql.bak系統(tǒng)找不到指定路徑錯(cuò)誤的解決方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Java實(shí)現(xiàn)List集合手動(dòng)分頁(yè)的方法
在工作中難免會(huì)遇到,將組裝的集合數(shù)據(jù)進(jìn)行分頁(yè)處理,本文主要介紹了Java實(shí)現(xiàn)List集合手動(dòng)分頁(yè)的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
SpringCloud客戶(hù)端的負(fù)載均衡Ribbon的實(shí)現(xiàn)
微服務(wù)架構(gòu),不可避免的存在單個(gè)微服務(wù)有多個(gè)實(shí)例,這篇文章主要介紹了SpringCloud客戶(hù)端的負(fù)載均衡Ribbon的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
springboot?maven?plugin報(bào)紅的解決辦法
本文主要介紹了springboot?maven?plugin報(bào)紅的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作
這篇文章主要介紹了將下載好的jar包導(dǎo)入到本地maven倉(cāng)庫(kù)中操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
SpringBoot請(qǐng)求參數(shù)相關(guān)注解說(shuō)明小結(jié)
這篇文章主要介紹了SpringBoot請(qǐng)求參數(shù)相關(guān)注解說(shuō)明,主要包括@PathVariable,@RequestHeader、@CookieValue、@RequestBody和@RequestParam,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下2022-05-05
關(guān)于springBoot yml文件的list讀取問(wèn)題總結(jié)(親測(cè))
這篇文章主要介紹了關(guān)于springBoot yml文件的list讀取問(wèn)題總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

