spring boot Lombok @Slf4j日志處理教程(一篇足夠)
引言
在 Java 開(kāi)發(fā)中,日志記錄是一項(xiàng)至關(guān)重要的功能,它能幫助開(kāi)發(fā)者快速定位和解決問(wèn)題。然而,傳統(tǒng)的日志記錄方式需要在每個(gè)類中手動(dòng)創(chuàng)建日志對(duì)象,這會(huì)產(chǎn)生大量的樣板代碼,影響代碼的簡(jiǎn)潔性和可讀性。Lombok 庫(kù)提供的 @Slf4j 注解為我們解決了這一問(wèn)題,極大地簡(jiǎn)化了日志對(duì)象的創(chuàng)建過(guò)程。本文將深入講解 @Slf4j 注解,以及與之相關(guān)的 SLF4J、Logback 和 Log4j 之間的關(guān)系,同時(shí)詳細(xì)介紹日志級(jí)別、根日志和子日志的配置。
一、@Slf4j 注解的作用
@Slf4j 是 Lombok 庫(kù)提供的一個(gè)注解,其主要作用是在編譯時(shí)自動(dòng)為類生成一個(gè)基于 SLF4J(Simple Logging Facade for Java)的日志對(duì)象 log。使用該注解后,開(kāi)發(fā)者無(wú)需手動(dòng)編寫(xiě)創(chuàng)建日志對(duì)象的代碼,可直接使用 log 對(duì)象調(diào)用 SLF4J 的日志方法,如 log.info()、log.error() 等。
示例代碼
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyClass {
public void doSomething() {
log.info("Doing something...");
}
}
在上述代碼中,使用 @Slf4j 注解后,MyClass 類中會(huì)自動(dòng)生成一個(gè)名為 log 的日志對(duì)象,在 doSomething 方法中可以直接使用該對(duì)象記錄日志信息。
二、SLF4J 和 Logback 或者 Log4j 的關(guān)系
(一)SLF4J
SLF4J 是一個(gè)日志門面,它為 Java 日志系統(tǒng)提供了統(tǒng)一的接口。開(kāi)發(fā)者在編寫(xiě)日志代碼時(shí)使用 SLF4J 的接口,這樣可以在不修改代碼的情況下,靈活地切換底層的日志實(shí)現(xiàn)框架。
(二)Logback 和 Log4j
Logback 和 Log4j 是具體的日志實(shí)現(xiàn)框架,它們實(shí)現(xiàn)了 SLF4J 定義的接口。Logback 是 Log4j 的繼任者,由 Log4j 的創(chuàng)始人開(kāi)發(fā),在性能和功能上有所改進(jìn)。
(三)關(guān)系總結(jié)
可以將 SLF4J 看作是一個(gè)中間層,開(kāi)發(fā)者通過(guò)它來(lái)調(diào)用日志功能,而 Logback 或 Log4j 則是實(shí)際執(zhí)行日志記錄操作的底層框架。這種設(shè)計(jì)使得開(kāi)發(fā)者可以根據(jù)項(xiàng)目的需求和實(shí)際情況選擇合適的日志實(shí)現(xiàn),而無(wú)需擔(dān)心代碼的修改。
三、為何用 @Slf4j 注解并正確配置 Logback.xml,日志就會(huì)輸出到控制臺(tái)
(一)@Slf4j 創(chuàng)建日志對(duì)象
使用 @Slf4j 注解后,類中會(huì)自動(dòng)生成一個(gè)基于 SLF4J 的 log 對(duì)象。當(dāng)調(diào)用 log 對(duì)象的日志方法(如 log.info())時(shí),SLF4J 會(huì)根據(jù)配置去尋找具體的日志實(shí)現(xiàn)框架。
(二)Logback.xml 配置日志輸出
Logback.xml 是 Logback 的配置文件,它定義了日志的輸出格式、輸出目標(biāo)等信息。在配置文件中,可以配置不同的 Appender(日志輸出目的地),如 ConsoleAppender(輸出到控制臺(tái))、FileAppender(輸出到文件)等。同時(shí),還可以配置日志的級(jí)別、日志的格式等。當(dāng)配置文件中指定了將日志輸出到控制臺(tái)的 Appender,并將其關(guān)聯(lián)到相應(yīng)的日志記錄器時(shí),日志信息就會(huì)按照配置的格式輸出到控制臺(tái)。
(三)示例配置
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
在上述配置中,定義了一個(gè)名為 CONSOLE 的 ConsoleAppender,并配置了日志的輸出格式。根日志的級(jí)別設(shè)置為 info,并將 CONSOLE Appender 關(guān)聯(lián)到根日志,這意味著所有不低于 info 級(jí)別的日志都會(huì)輸出到控制臺(tái)。
四、日志級(jí)別
日志級(jí)別用于控制哪些日志信息會(huì)被輸出,常見(jiàn)的日志級(jí)別從低到高依次為:
(一)TRACE 最詳細(xì)的日志級(jí)別,用于記錄程序執(zhí)行過(guò)程中的細(xì)枝末節(jié),通常僅在開(kāi)發(fā)和調(diào)試階段使用。
(二)DEBUG 用于開(kāi)發(fā)和測(cè)試環(huán)境,輸出調(diào)試信息,幫助開(kāi)發(fā)者定位問(wèn)題。
(三)INFO 記錄系統(tǒng)的正常運(yùn)行信息,如服務(wù)啟動(dòng)、用戶登錄等。
(四)WARN 表示可能存在潛在問(wèn)題,但不影響系統(tǒng)的正常運(yùn)行,如配置文件中的過(guò)期設(shè)置。
(五)ERROR 記錄系統(tǒng)出現(xiàn)的錯(cuò)誤信息,如數(shù)據(jù)庫(kù)連接失敗、空指針異常等。
日志系統(tǒng)會(huì)輸出級(jí)別不低于當(dāng)前設(shè)定日志級(jí)別的日志信息。例如,若日志級(jí)別設(shè)置為 INFO,那么 TRACE 和 DEBUG 級(jí)別的日志信息就不會(huì)被輸出。
五、配置根日志和子日志
(一)根日志(Root Logger)
根日志是日志系統(tǒng)的頂層日志記錄器,所有其他日志記錄器都是它的子記錄器。根日志為整個(gè)日志系統(tǒng)設(shè)置基礎(chǔ)的日志級(jí)別和默認(rèn)的 Appender。如果某個(gè)子日志記錄器沒(méi)有單獨(dú)配置日志級(jí)別或者 Appender,就會(huì)繼承根日志的設(shè)置。
示例配置
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
在上述配置中,根日志的級(jí)別設(shè)置為 info,并關(guān)聯(lián)了名為 CONSOLE 的 Appender,這意味著所有不低于 info 級(jí)別的日志都會(huì)輸出到控制臺(tái)。
(二)子日志記錄器(Child Loggers)
子日志記錄器以類的全限定名或包名作為名稱,可針對(duì)特定的類或包單獨(dú)設(shè)置日志級(jí)別和 Appender,實(shí)現(xiàn)更精細(xì)的日志控制。
示例配置
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>app.log</file>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
<logger name="com.example.MyClass" level="debug">
<appender-ref ref="FILE" />
</logger>
</configuration>
在上述配置中,根日志的級(jí)別為 info,關(guān)聯(lián) CONSOLE Appender;com.example.MyClass 子日志記錄器的級(jí)別設(shè)置為 debug,并關(guān)聯(lián)了名為 FILE 的 Appender。這表示 MyClass 類中不低于 debug 級(jí)別的日志信息會(huì)輸出到 app.log 文件中。
六、總結(jié)
通過(guò)使用 Lombok 的 @Slf4j 注解,開(kāi)發(fā)者可以輕松地創(chuàng)建日志對(duì)象,避免了手動(dòng)編寫(xiě)樣板代碼的繁瑣。同時(shí),結(jié)合 SLF4J 日志門面和 Logback 或 Log4j 日志實(shí)現(xiàn)框架,以及合理配置日志級(jí)別、根日志和子日志,可以實(shí)現(xiàn)靈活、高效的日志記錄功能。在實(shí)際開(kāi)發(fā)中,開(kāi)發(fā)者可以根據(jù)項(xiàng)目的需求和實(shí)際情況,選擇合適的日志級(jí)別和配置方式,以滿足不同場(chǎng)景下的日志記錄需求。
到此這篇關(guān)于spring boot Lombok @Slf4j日志處理的文章就介紹到這了,更多相關(guān)spring boot Lombok @Slf4j日志處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計(jì)模式之單例模式實(shí)例詳解【懶漢式與餓漢式】
這篇文章主要介紹了Java設(shè)計(jì)模式之單例模式,簡(jiǎn)單說(shuō)明了單例模式的原理并結(jié)合具體實(shí)例形式分析了單例模式中懶漢式與餓漢式的具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-09-09
Java使用FutureTask實(shí)現(xiàn)預(yù)加載的示例詳解
基于FutureTask的特性,通??梢允褂肍utureTask做一些預(yù)加載工作,比如一些時(shí)間較長(zhǎng)的計(jì)算等,本文就來(lái)和大家講講具體實(shí)現(xiàn)方法吧,感興趣的可以了解一下2023-06-06
JVM創(chuàng)建對(duì)象及訪問(wèn)定位過(guò)程詳解
這篇文章主要介紹了JVM創(chuàng)建對(duì)象及訪問(wèn)定位過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
java面向?qū)ο?API(接口)與集合(ArrayList)
這篇文章主要介紹了Java語(yǔ)言面向?qū)ο蟮腁PI與集合,還是十分不錯(cuò)的,這里給大家分享下,需要的朋友可以參考,希望能夠給你帶來(lái)幫助2021-08-08
Spring Boot的filter(過(guò)濾器)簡(jiǎn)單使用實(shí)例詳解
過(guò)濾器(Filter)的注冊(cè)方法和 Servlet 一樣,有兩種方式:代碼注冊(cè)或者注解注冊(cè),下面通過(guò)實(shí)例給大家介紹Spring Boot的filter(過(guò)濾器)簡(jiǎn)單使用,一起看看吧2017-04-04
HDFS的Java API的訪問(wèn)方式實(shí)例代碼
這篇文章主要介紹了HDFS的Java API的訪問(wèn)方式實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
淺談Spring-cloud 之 sleuth 服務(wù)鏈路跟蹤
本篇文章主要介紹了淺談Spring-cloud 之 sleuth 服務(wù)鏈路跟蹤,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

