一文掌握Spring?Boot?日志文件
SpringBoot日志文件
1. 日志有什么用
日志是程序的重要組成部分,想象一下,如果程序報錯了,不讓你打開控制臺看日志,那么你能找到報錯的原因嗎。
日志對于我們來說,最主要的用途就是排除和定位問題。除了發(fā)現(xiàn)和定位問題之外,我們還可以通過日志實現(xiàn)以下功能:
- 記錄用戶登錄日志,方便分析用戶是正常登錄,還是惡意破解用戶
- 記錄系統(tǒng)的操作日志,方便數(shù)據(jù)恢復(fù)和定位操作人
- 記錄程序的執(zhí)行時間,方便以后優(yōu)化程序提供數(shù)據(jù)支持
2. 日志怎么用
Spring Boot項目在啟動的時候默認(rèn)就會有日志的輸出,如下圖:

通過上述信息我們可以發(fā)現(xiàn):
- Spring Boot內(nèi)置了日志框架
- 默認(rèn)情況下,輸出的日志并不是開發(fā)者定義和打印的,那么開發(fā)者怎么在程序中定義打印日志?
- 日志默認(rèn)是打印在控制臺上,而控制臺的日志是不能被保存的, 如何將日志永久的保存下來?
3. 自定義日志打印
開發(fā)者自定義打印日志的實現(xiàn)步驟:
- 在程序中得到日志
- 使用日志對象的相關(guān)語法輸出要打印的內(nèi)容
3.1 在程序中得到日志對象
private static final Logger log = LoggerFactory.getLogger(UserController.class);
日志工廠需要將每個類的類型傳進去,這樣我們才能知道日志的歸屬類,才能更方便更直觀的定位到問題
注意:logger對象屬于org.slf4j包下的,不要導(dǎo)錯了

3.2 使用日志對象打印日志
日志對象的打印方法有很多種,我們可以使用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. 日志級別
4.1 日志級別有什么用?
- 日志級別可以幫你篩選出重要的信息,比如設(shè)置日志級別為error,那么就可以只看到程序的報錯日志了,對于普通的調(diào)試日志和業(yè)務(wù)日志就可以忽略了。從而節(jié)省開發(fā)者篩選的時間
- 日志級別可以控制不同環(huán)境下,一個程序是否需要打印日志,如開發(fā)環(huán)境我們需要很詳細(xì)的信息,而生產(chǎn)環(huán)境為了保持性能和安全性就會輸出少量的日志,而通過日志級別可以實現(xiàn)此類需求
4.2 日志級別的分類與使用
日志級別分為:
- trace: 微量,少許的意思,級別最低
- debug:需要調(diào)試時候的關(guān)鍵信息打印
- info:普通的打印信息(默認(rèn)日志級別)
- warn:警告:不影響使用,但需要注意的問題
- error:錯誤信息,級別較高的錯誤日志信息
- fatal:致命的,因為代碼異常導(dǎo)致程序退出執(zhí)行的事件
日志級別的順序:

越往上,接收到的信息就越少,如設(shè)置了warn就只能接收到warn及其上面的級別
日志級別設(shè)置
logging:
level:
root: error默認(rèn)日志輸出級別
清除掉配置文件當(dāng)中的日志設(shè)置,觀察控制臺輸出的日志級別
得到結(jié)論,日志輸出級別默認(rèn)是info
當(dāng)存在局部日志級別和全局日志級別設(shè)置,那么當(dāng)訪問局部日志時,使用的是局部日志級別。也就是局部日志優(yōu)先級高于全局日志的優(yōu)先級
5. 日志持久化
以上的日志都是輸出在控制臺上,然而生產(chǎn)環(huán)境上咱們需要將日志保存下來,以便出現(xiàn)問題之后追溯問題,把日志保存下來的過程叫做持久化
想要將日至持久化,只需要在配置文件中指定日志的存儲目錄或者是指定日志保存文件名,Spring Boot就會將控制臺的日志寫到相應(yīng)的目錄或文件下
配置日志文件的保存路徑:
logging:
file:
path: D:\rizhi保存的路徑,當(dāng)中包含轉(zhuǎn)義字符方面的設(shè)置我們可以使用這個/來作為分割符。
如果堅持使用Windows下的分割符,我們需要使用\轉(zhuǎn)義字符來轉(zhuǎn)義一下
配置日志文件的文件名:
logging:
file:
name: D:/rizhi/logger/spring.log6. 更簡單的日志輸出–lombok
每次使用LoggerFactory.getLogger很繁瑣,且每個類都添加一遍,也很麻煩。這里的lombok是一種更好的日志輸出方式
- 添加lombok框架支持
- 使用@slf4j注解輸出日志
6.1 添加 lombok 依賴
首先要安裝一個插件:

然后再pom.xml頁面右鍵、



最后重新添加依賴就可以了

6.2 輸出日志
使用@Slf4j注解,在程序中使用log對象即可輸入日志并且只能使用log對象才能輸出,這是lombok提供的對象名
6.3 lombok原理解釋
lombok 能夠打印?志的密碼就在 target ?錄??,target 為項?最終執(zhí)?的代碼,查看 target ?錄我們可以發(fā)現(xiàn):

這里的@Slf4j注解變成了一個對象。
下面是java程序的運行原理:

6.4 lombok更多注解說明
基本注解
| 注解 | 作用 |
|---|---|
| @Getter | 自動添加get方法 |
| @Setter | 自動添加set方法 |
| @ToString | 自動添加toString方法 |
| @EqualsAndHashCode | 自動添加equals和hasCode方法 |
| @NoArgsConstructor | 自動添加無參構(gòu)造方法 |
| @AllArgsConstructor | 自動添加全屬性構(gòu)造方法,順序按照屬性的定義順序 |
| @NonNull | 屬性不能為null |
| @RequiredArgsConstructor | 自動添加必須屬性的構(gòu)造方法,final + @NonNull的屬性為需 |
組合注解:
| 注解 | 作用 |
|---|---|
| @Data | @Getter+@Setter+EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor |
日志注解
| 注解 | 作用 |
|---|---|
| @Slf4j | 添加一個名為log的對象 |
7. 總結(jié)
日志是程序員中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,Spring Boot提供了日志框架,默認(rèn)情況下使用的是info日志級別將日志輸出到控制臺的。我們可以通過lombok提供的@Slf4j注解和log對象快速的打印自定義日志,日志包含了6個級別:
- trace:微量,少許的意思,級別最低
- debug:需要調(diào)試的時候的關(guān)鍵信息打印
- info:普通的打印信息
- warn:警告,不影響使用,但需要注意的問題
- error:錯誤信息,級別較高的錯誤日志信息
- fatal:致命的,因為代碼異常導(dǎo)致程序退出執(zhí)行的事件
日志級別依次提升,而日志級別越高,收到的日志信息也就越少,我們可以通過配置日志的保存域名或保存目錄來將日志永久的保存下來
到此這篇關(guān)于Spring Boot 日志文件的文章就介紹到這了,更多相關(guān)Spring Boot 日志文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot在項目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的方法
這篇文章主要給大家介紹了SpringBoot在項目停止(服務(wù)停止/關(guān)閉退出)之后執(zhí)行的兩種方法,實現(xiàn)DisposableBean接口和使用@PreDestroy注解,文中有詳細(xì)的代碼講解,具有一定的參考價值,需要的朋友可以參考下2023-12-12
mybatis那些約定的配置你真的都了解嗎(經(jīng)驗總結(jié))
mybatsi中Mapper和xml文件之間有很多約定俗稱的規(guī)則,比如名稱匹配,包掃描,別名等,這些規(guī)則是什么。如果想更加靈活,該如何配置呢?今天就給大家講一下如何配置mybatsi的xml文件2021-06-06
如何對?Excel?表格中提取的數(shù)據(jù)進行批量更新
這篇文章主要介紹了如何對Excel表格中提取的數(shù)據(jù)進行批量更新操作,本文通過示例代碼介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
SpringBoot 如何實現(xiàn)Session共享
這篇文章主要介紹了SpringBoot 如何實現(xiàn)Session共享,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下2020-09-09
MyBatis的@SelectProvider注解構(gòu)建動態(tài)SQL方式
這篇文章主要介紹了MyBatis的@SelectProvider注解構(gòu)建動態(tài)SQL方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯點、幻讀
這篇文章主要介紹了基于Spring中的事務(wù)@Transactional細(xì)節(jié)與易錯點、幻讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

