一文掌握Spring?Boot?日志文件
SpringBoot日志文件
1. 日志有什么用
日志是程序的重要組成部分,想象一下,如果程序報(bào)錯(cuò)了,不讓你打開控制臺(tái)看日志,那么你能找到報(bào)錯(cuò)的原因嗎。
日志對(duì)于我們來說,最主要的用途就是排除和定位問題。除了發(fā)現(xiàn)和定位問題之外,我們還可以通過日志實(shí)現(xiàn)以下功能:
- 記錄用戶登錄日志,方便分析用戶是正常登錄,還是惡意破解用戶
- 記錄系統(tǒng)的操作日志,方便數(shù)據(jù)恢復(fù)和定位操作人
- 記錄程序的執(zhí)行時(shí)間,方便以后優(yōu)化程序提供數(shù)據(jù)支持
2. 日志怎么用
Spring Boot項(xiàng)目在啟動(dòng)的時(shí)候默認(rèn)就會(huì)有日志的輸出,如下圖:
通過上述信息我們可以發(fā)現(xiàn):
- Spring Boot內(nèi)置了日志框架
- 默認(rèn)情況下,輸出的日志并不是開發(fā)者定義和打印的,那么開發(fā)者怎么在程序中定義打印日志?
- 日志默認(rèn)是打印在控制臺(tái)上,而控制臺(tái)的日志是不能被保存的, 如何將日志永久的保存下來?
3. 自定義日志打印
開發(fā)者自定義打印日志的實(shí)現(xiàn)步驟:
- 在程序中得到日志
- 使用日志對(duì)象的相關(guān)語法輸出要打印的內(nèi)容
3.1 在程序中得到日志對(duì)象
private static final Logger log = LoggerFactory.getLogger(UserController.class);
日志工廠需要將每個(gè)類的類型傳進(jìn)去,這樣我們才能知道日志的歸屬類,才能更方便更直觀的定位到問題
注意:logger對(duì)象屬于org.slf4j包下的,不要導(dǎo)錯(cuò)了
3.2 使用日志對(duì)象打印日志
日志對(duì)象的打印方法有很多種,我們可以使用info方法來輸出日志,
@Controller @ResponseBody public class UserController { private static final Logger log = LoggerFactory.getLogger(UserController.class); @RequestMapping("/sayhi") public void sayHi() { log.trace("trace"); log.debug("debug"); log.info("info"); log.warn("warn"); log.error("error"); } }
4. 日志級(jí)別
4.1 日志級(jí)別有什么用?
- 日志級(jí)別可以幫你篩選出重要的信息,比如設(shè)置日志級(jí)別為error,那么就可以只看到程序的報(bào)錯(cuò)日志了,對(duì)于普通的調(diào)試日志和業(yè)務(wù)日志就可以忽略了。從而節(jié)省開發(fā)者篩選的時(shí)間
- 日志級(jí)別可以控制不同環(huán)境下,一個(gè)程序是否需要打印日志,如開發(fā)環(huán)境我們需要很詳細(xì)的信息,而生產(chǎn)環(huán)境為了保持性能和安全性就會(huì)輸出少量的日志,而通過日志級(jí)別可以實(shí)現(xiàn)此類需求
4.2 日志級(jí)別的分類與使用
日志級(jí)別分為:
- trace: 微量,少許的意思,級(jí)別最低
- debug:需要調(diào)試時(shí)候的關(guān)鍵信息打印
- info:普通的打印信息(默認(rèn)日志級(jí)別)
- warn:警告:不影響使用,但需要注意的問題
- error:錯(cuò)誤信息,級(jí)別較高的錯(cuò)誤日志信息
- fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)行的事件
日志級(jí)別的順序:
越往上,接收到的信息就越少,如設(shè)置了warn就只能接收到warn及其上面的級(jí)別
日志級(jí)別設(shè)置
logging: level: root: error
默認(rèn)日志輸出級(jí)別
清除掉配置文件當(dāng)中的日志設(shè)置,觀察控制臺(tái)輸出的日志級(jí)別
得到結(jié)論,日志輸出級(jí)別默認(rèn)是info
當(dāng)存在局部日志級(jí)別和全局日志級(jí)別設(shè)置,那么當(dāng)訪問局部日志時(shí),使用的是局部日志級(jí)別。也就是局部日志優(yōu)先級(jí)高于全局日志的優(yōu)先級(jí)
5. 日志持久化
以上的日志都是輸出在控制臺(tái)上,然而生產(chǎn)環(huán)境上咱們需要將日志保存下來,以便出現(xiàn)問題之后追溯問題,把日志保存下來的過程叫做持久化
想要將日至持久化,只需要在配置文件中指定日志的存儲(chǔ)目錄或者是指定日志保存文件名,Spring Boot就會(huì)將控制臺(tái)的日志寫到相應(yīng)的目錄或文件下
配置日志文件的保存路徑:
logging: file: path: D:\rizhi
保存的路徑,當(dāng)中包含轉(zhuǎn)義字符方面的設(shè)置我們可以使用這個(gè)/
來作為分割符。
如果堅(jiān)持使用Windows下的分割符,我們需要使用\
轉(zhuǎn)義字符來轉(zhuǎn)義一下
配置日志文件的文件名:
logging: file: name: D:/rizhi/logger/spring.log
6. 更簡(jiǎn)單的日志輸出–lombok
每次使用LoggerFactory.getLogger很繁瑣,且每個(gè)類都添加一遍,也很麻煩。這里的lombok是一種更好的日志輸出方式
- 添加lombok框架支持
- 使用@slf4j注解輸出日志
6.1 添加 lombok 依賴
首先要安裝一個(gè)插件:
然后再pom.xml頁面右鍵、
最后重新添加依賴就可以了
6.2 輸出日志
使用@Slf4j注解,在程序中使用log對(duì)象即可輸入日志并且只能使用log對(duì)象才能輸出,這是lombok提供的對(duì)象名
6.3 lombok原理解釋
lombok 能夠打印?志的密碼就在 target ?錄??,target 為項(xiàng)?最終執(zhí)?的代碼,查看 target ?錄我們可以發(fā)現(xiàn):
這里的@Slf4j注解變成了一個(gè)對(duì)象。
下面是java程序的運(yùn)行原理:
6.4 lombok更多注解說明
基本注解
注解 | 作用 |
---|---|
@Getter | 自動(dòng)添加get方法 |
@Setter | 自動(dòng)添加set方法 |
@ToString | 自動(dòng)添加toString方法 |
@EqualsAndHashCode | 自動(dòng)添加equals和hasCode方法 |
@NoArgsConstructor | 自動(dòng)添加無參構(gòu)造方法 |
@AllArgsConstructor | 自動(dòng)添加全屬性構(gòu)造方法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為null |
@RequiredArgsConstructor | 自動(dòng)添加必須屬性的構(gòu)造方法,final + @NonNull的屬性為需 |
組合注解:
注解 | 作用 |
---|---|
@Data | @Getter+@Setter+EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor |
日志注解
注解 | 作用 |
---|---|
@Slf4j | 添加一個(gè)名為log的對(duì)象 |
7. 總結(jié)
日志是程序員中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,Spring Boot提供了日志框架,默認(rèn)情況下使用的是info日志級(jí)別將日志輸出到控制臺(tái)的。我們可以通過lombok提供的@Slf4j注解和log對(duì)象快速的打印自定義日志,日志包含了6個(gè)級(jí)別:
- trace:微量,少許的意思,級(jí)別最低
- debug:需要調(diào)試的時(shí)候的關(guān)鍵信息打印
- info:普通的打印信息
- warn:警告,不影響使用,但需要注意的問題
- error:錯(cuò)誤信息,級(jí)別較高的錯(cuò)誤日志信息
- fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)行的事件
日志級(jí)別依次提升,而日志級(jí)別越高,收到的日志信息也就越少,我們可以通過配置日志的保存域名或保存目錄來將日志永久的保存下來
到此這篇關(guān)于Spring Boot 日志文件的文章就介紹到這了,更多相關(guān)Spring Boot 日志文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
新手小白學(xué)JAVA IDEA下載使用手冊(cè)全集
IDEA的每一個(gè)方面都是為了最大限度地提高開發(fā)人員的工作效率而設(shè)計(jì)的,它的智能編碼輔助和人機(jī)工程學(xué)設(shè)計(jì)會(huì)讓開發(fā)過程變得愉悅且高效,今天給大家分享新手小白學(xué)JAVA IDEA下載使用手冊(cè)全集,對(duì)idea新手使用相關(guān)知識(shí)感興趣的朋友跟隨小編一起學(xué)習(xí)吧2021-05-05IDEA2023常用配置指南(JDK/系統(tǒng)設(shè)置等常用配置)
idea很強(qiáng)大,但是初次安裝默認(rèn)的有很多設(shè)置并不是滿足我們開發(fā)的需要,下面這篇文章主要給大家介紹了關(guān)于IDEA2023常用配置(JDK/系統(tǒng)設(shè)置等常用配置)的相關(guān)資料,需要的朋友可以參考下2023-12-12使用Maven 搭建 Spring MVC 本地部署Tomcat的詳細(xì)教程
這篇文章主要介紹了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Spring Boot Admin郵件警報(bào)整合過程解析
這篇文章主要介紹了Spring Boot Admin郵件警報(bào)整合過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot監(jiān)聽器的實(shí)現(xiàn)示例
在SpringBoot中,你可以使用監(jiān)聽器來響應(yīng)特定的事件,本文主要介紹了SpringBoot監(jiān)聽器的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12Java冒泡排序(Bubble Sort)實(shí)例講解
冒泡排序的原理:假設(shè)要求的數(shù)組是正序,兩兩進(jìn)行比較,如果前一個(gè)書比后一個(gè)數(shù)小,位置不變。如果前一個(gè)數(shù)比后一個(gè)數(shù)大,位置互換,再跟后一個(gè)數(shù)進(jìn)行比較,直到最后。就是逐步把大數(shù)送到最后,下面來個(gè)實(shí)例給大家看看2013-11-11