0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot日志學習筆記

jf_ro2CN3Fa ? 來源:CSDN-戰(zhàn)斧 ? 2023-09-21 15:12 ? 次閱讀

一、日志重要嗎

程序中的日志重要嗎? 在回答這個問題前,筆者先說個事例:

筆者印象尤深的就是去年某個同事,收到了客戶反饋的緊急bug。盡管申請到了日志文件,但因為很多關鍵步驟沒有打印日志,導致排查進度很慢,數(shù)個小時都沒能排查到問題,也無法給出解決對策。導致了客戶程序一直阻斷,最終產(chǎn)生了不少損失。 事后,經(jīng)過仔細推敲,成功復現(xiàn)了這個bug,其實是一個很不起眼的數(shù)據(jù)轉換導致的??梢驗槿罩緝?nèi)容的匱乏,排查起來難度很大。其實只要在數(shù)據(jù)轉換前后進行日志輸出,這個問題就是一眼的事。但可惜沒如果,故事的最后,開發(fā)部門還是遭到了客戶的投訴,影響到了部門績效

對于剛學習編程的同學,很多人都對日志滿不在乎,我們在做code review的時候,經(jīng)常發(fā)現(xiàn)一些新同學喜歡一個方法寫得很長,然后中間的注釋和日志都少的可憐。

坦白的說,這是很不好的習慣,這意味著日后方法出了bug,或者需要迭代,要花費大量時間來理清方法的思路。千萬別迷信什么“方法名、字段名起的見明知意,就可以不寫注釋與日志”,那是他們的業(yè)務場景不夠復雜。以筆者為例,復雜的場景涉及很多公式、奇特的規(guī)定,不寫注釋與日志,后續(xù)沒人能維護得了

所以請務必記住,日志在開發(fā)過程中非常重要。它可以幫助開發(fā)人員了解程序中發(fā)生了什么,以及在某些情況下為什么會發(fā)生錯誤或異常。通過查看日志,開發(fā)人員可以輕松地定位并解決問題,并且可以更好地監(jiān)控和調(diào)整應用程序的性能,在必要時進行故障排除和安全檢查

08e8c1e0-581f-11ee-939d-92fbcf53809c.png

二、日志分級

最開始的日志分級是由Syslog的開發(fā)者Eric Allman在1981年提出的。之后,這個級別分級系統(tǒng)被廣泛應用于各種領域的日志記錄和信息處理中。下面我們就來介紹下常用的日志等級

TRACE

是最低級別的日志記錄,用于輸出最詳細的調(diào)試信息,通常用于開發(fā)調(diào)試目的。在生產(chǎn)環(huán)境中,應該關閉 TRACE 級別的日志記錄,以避免輸出過多無用信息。

DEBUG

是用于輸出程序中的一些調(diào)試信息,通常用于開發(fā)過程中。像 TRACE 一樣,在生產(chǎn)環(huán)境中應該關閉 DEBUG 級別的日志記錄。

INFO

用于輸出程序正常運行時的一些關鍵信息,比如程序的啟動、運行日志等。通常在生產(chǎn)環(huán)境中開啟 INFO 級別的日志記錄。

WARN

是用于輸出一些警告信息,提示程序可能會出現(xiàn)一些異常或者錯誤。在應用程序中,WARN 級別的日志記錄通常用于記錄一些非致命性異常信息,以便能夠及時發(fā)現(xiàn)并處理這些問題。

ERROR

是用于輸出程序運行時的一些錯誤信息,通常表示程序出現(xiàn)了一些不可預料的錯誤。在應用程序中,ERROR 級別的日志記錄通常用于記錄一些致命性的異常信息,以便能夠及時發(fā)現(xiàn)并處理這些問題。

當然,除了這五種級別以外,還有一些日志框架定義了其他級別,例如 Python 中的 CRITICAL、PHP 中的 FATAL 等。CRITICAL 和 FATAL 都是用于表示程序出現(xiàn)了致命性錯誤或者異常,即不可恢復的錯誤。當然,對于我們今天要說的內(nèi)容,知道上述五種日志等級就夠了。

三、常用日志插件

Log4j(1999年誕生)

Log4j 是Java領域中最早的流行日志框架之一。它由Ceki Gülcü開發(fā),并后來由Apache軟件基金會接管。Log4j 提供了靈活的配置選項、多種輸出目的地、日志級別和分層日志體系。盡管Log4j 1在其時代取得了巨大的成功,但在性能和某些功能方面存在限制,因此后來演化為Log4j 2。

SLF4J(2004年誕生)

嚴格來說,SLF4J(Simple Logging Facade for Java)并不算一個插件,而是Ceki Gülcü開發(fā)的一個日志門面接口。它為Java應用程序提供了統(tǒng)一的日志抽象,使開發(fā)人員可以使用一致的API進行日志記錄,而不需要直接依賴于特定的日志實現(xiàn)。SLF4J 可以與多種底層日志框架(如Logback、Log4j 2、java.util.logging等)結合使用。

Logback(2009年誕生)

Logback 是Ceki Gülcü開發(fā)的日志框架,他也是Log4j的作者。Logback 是Log4j 1的后續(xù)版本,旨在提供更高性能、更靈活的配置和現(xiàn)代化的日志解決方案。Logback 支持異步日志記錄、多種輸出格式、靈活的配置以及與SLF4J緊密集成。

Log4j 2(2014年誕生)

Log4j 2 是Apache軟件基金會開發(fā)的Log4j的下一代版本。它引入了許多新特性,如異步日志記錄、插件支持、豐富的過濾器等,旨在提供更好的性能和靈活性。Log4j 2 在設計上考慮了Log4j 1的局限性,并且支持多種配置方式。

小故事

不難注意到,一個有意思的小故事是,前三款日志插件都是Ceki Gülcü開發(fā)的,但 Log4j 2 并不是,雖然現(xiàn)在有很多人以為log4j2也是他寫的,但我們在github上可以看到其個人說明 “Unaffiliated with log4j 2.x.” (與 log4j 2.x 無關),所以log4j2 和 logback 都自稱是log4j 的后續(xù)版本,到底誰才算正統(tǒng)續(xù)作呢?這就留給各位讀者自己玩味了

08fc2c80-581f-11ee-939d-92fbcf53809c.png

四、外觀模式與SLF4J

在講解更多插件詳情之前,我們先來看看使用最多的SLF4J ,我們前面說了 SLF4J(Simple Logging Facade for Java)是Ceki Gülcü開發(fā)的一個日志門面接口,那么很顯然這里就用到了門面模式(即Facade 或 外觀模式),筆者比較習慣說成是外觀模式,后續(xù)就稱為外觀模式。

09435ed4-581f-11ee-939d-92fbcf53809c.png

1. 外觀模式

定義:外觀模式是一種結構型設計模式,它提供了一個簡單的接口,封裝了底層復雜的子系統(tǒng),使得客戶端可以更方便地使用這個子系統(tǒng)

目的:外觀模式的目的是隱藏底層系統(tǒng)的復雜性,降低訪問成本。

如果說看定義有些抽象,那我們可以以生活中的例子來說,我們都知道現(xiàn)在越來越流行智能家居,也就是家庭內(nèi)裝了很多智能家電,從電視、空調(diào)、到廊燈甚至窗簾都是智能的。這類家庭往往會有一個控制中心,我們不需要手動去開電視,只需要對著控制中心說:“小A小A,幫我打開電視,音量調(diào)到30%”,電視就會應聲打開并調(diào)節(jié)音量

那么這樣的話,我們不需要知道怎么開電視,怎么調(diào)音量。通通都能用最簡單的話語來調(diào)節(jié)。同理,現(xiàn)在手機上的拍照功能:感光度,對焦,白平衡這些細節(jié)都給你自動完成了,所以這些復雜的內(nèi)容你現(xiàn)在根本不用管,只需要猛按拍照鍵即可。

這就是外觀模式的意義,外觀模式就是為了隱藏系統(tǒng)的復雜性而設計出來的,讓客戶端只對接觸到一個外觀類,而不會接觸到系統(tǒng)內(nèi)部的復雜邏輯

2. SLF4J 的誕生

在早期使用日志框架時,應用程序通常需要直接與具體的日志框架進行耦合,這就導致了以下幾個問題:

代碼依賴性

應用程序需要直接引用具體的日志框架,從而導致代碼與日志框架強耦合,難以滿足應用程序對日志框架的靈活配置。

日志框架不統(tǒng)一

在使用不同的日志框架時,應用程序需要根據(jù)具體的日志框架來編寫代碼,這不僅會增加開發(fā)難度,而且在多種日志框架中切換時需要進行大量的代碼改動。

性能問題

在日志輸出頻繁的情況下,由于日志框架的實現(xiàn)方式和API設計不同,可能會導致性能問題。

為了解決這些問題,SLF4J提供了一套通用的日志門面接口,讓應用程序可以通過這些接口來記錄日志信息,而不需要直接引用具體的日志框架。這樣,應用程序就可以在不同的日志框架之間進行靈活配置和切換,同時還可以獲得更好的性能表現(xiàn)。所以,我強烈建議各位使用SLF4J, 而不是直接對接某個具體的日志框架。

3. SLF4J 的使用

首先,我們需要在工程內(nèi)引入包,但是如果你用了springboot,各種 spring-boot-starter 啟動器已經(jīng)引用過了,所以引用前最好確認下:


org.slf4j
slf4j-api
1.7.32

然后在我們要打印日志的類里加上一行 ;private static final Logger logger = LoggerFactory.getLogger(XXXX.class); 即可使用,如下:

importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;

publicclassMyClass{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(MyClass.class);
//...
publicstaticvoidmain(String[]args){
log.info("Thisisaninfomessage.");
}
}

如果我們引用了lombok的話,也可以使用lombok的注解@Slf4j 代替上面那句話來使用 SLF4J ,如下:

importlombok.extern.slf4j.Slf4j;

@Slf4j
publicclassMyClass{
publicstaticvoidmain(String[]args){
log.info("Thisisaninfomessage.");
}
}

但是,我們都知道SLF4J僅僅是個門面,換句話說,僅有接口而沒有實現(xiàn),如果此刻我們直接運行,打印日志是沒有用處的

0988a174-581f-11ee-939d-92fbcf53809c.png

所以,我們?nèi)绻\行,我們必須要給 SLF4J 安排上實現(xiàn),而目前最常用的就是 logback 和 log4j2 了,就讓我們接著往下看

五、雙雄之爭

其實關于 Logback 和 Log4j 2,網(wǎng)絡上有很多評測,就不需贅述了,主要是圍繞性能方面的,從目前大家的反饋看,Log4j 2 晚出現(xiàn)好幾年,還是有后發(fā)優(yōu)勢的,性能會比 Logback 好。當然, Logback 本身性能也很強,對于大多數(shù)場景,完全是夠用的,而且配置比較直觀,是spring-boot 默認使用的日志插件。

0994d868-581f-11ee-939d-92fbcf53809c.png

所以,選誰都可以,如果不想費神,可以直接使用spring-boot自帶的Logback,如果對日志性能要求很高,使用log4j2更保險,我們接下來分別介紹兩者。

1. Logback

1. 引用

由于 Logback 為 spring-boot 默認日志框架,所以無需再引用,但對于非spring - boot 項目,可以做如下引用


ch.qos.logback
logback-classic
1.2.12

Logback 的核心模塊為 logback-classic,它提供了一個 SLF4J 的實現(xiàn),兼容 Log4j API,可以無縫地替換 Log4j。它自身已經(jīng)包含了 logback-core 模塊,而 logback-core,顧名思義就是 logback 的核心功能,包括日志記錄器、Appender、Layout 等。其他 logback 模塊都依賴于該模塊

2. 配置

logback 可以通過 XML 或者 Groovy 配置。下面以 XML 配置為例。logback 的 XML 配置文件名稱通常為 logback.xml 或者 logback-spring.xml(在 Spring Boot 中),需要放置在 classpath 的根目錄下,



 


 


 


%-5relative[%thread]%-5level%logger{35}-%msg%n



 




 


 


 


 

${LOG_PATH}/app.log

 
50MB
 
${ARCHIVE_PATTERN}
30
 

50MB

 
true


%d{yyyy-MM-ddHHss.SSS}[%thread]%-5level%logger{35}-%msg%n



 




 

0
256



 





其中,主要包括以下配置:

springProperty 定義了 log 文件的存儲路徑,可以通過 Spring 的屬性文件配置方式進行設置,如果沒有配置則默認存儲在 logs 目錄下。

appender 定義了日志輸出的目標,這里包括了控制臺輸出和文件輸出兩種,具體可以根據(jù)需求進行配置。

root 定義了默認的日志級別和輸出目標,默認情況下,INFO 級別以上的日志信息會輸出到控制臺,可以根據(jù)實際需求進行修改。

logger 定義了不同組件的日志級別和輸出目標,例如,這里定義了 com.example 這個組件的日志級別為 DEBUG,而 com.example.demo 這個組件的日志級別為 ERROR,并將其輸出到文件中。

rollingPolicy 定義了日志文件的切割規(guī)則和歸檔策略,此處定義了日志文件每個 50MB 進行切割,每天生成一個日志文件,并且壓縮和刪除過期文件,最多保留 30 天的日志文件。

encoder 定義了日志信息的輸出格式,具體的格式可以自行定義。

asyncAppender 定義了異步輸出日志的方式,對于高并發(fā)時,可以使用異步輸出來提高系統(tǒng)的性能。

discardingThreshold 定義了異步輸出隊列的閾值,當隊列中的數(shù)據(jù)量超過此值時,會丟棄最早放入的數(shù)據(jù),此處設置為 0 表示隊列不會丟棄任何數(shù)據(jù)。

queueSize 定義了異步輸出隊列的大小,當隊列滿時,會等待隊列中的數(shù)據(jù)被消費后再將數(shù)據(jù)放入隊列中,此處設置為 256。

3. 演示

我們新建一個普通工程(非spring工程),引用Logback后,把上述配置文件復制進logback.xml,然后將工程結構設置成如下模式

09a25998-581f-11ee-939d-92fbcf53809c.png

其中兩個類的代碼如下:

publicclassMain{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(Main.class);
publicstaticvoidmain(String[]args){
log.trace("ThisisaMaintracemessage.");
log.debug("ThisisaMaindebugmessage.");
log.info("ThisisaMaininfomessage.");
log.warn("ThisisaMainwarnmessage.");
log.error("ThisisaMainerrormessage.");
Slave.main(args);
}
}

publicclassSlave{
privatestaticfinalLoggerlog=LoggerFactory.getLogger(Slave.class);
publicstaticvoidmain(String[]args){
log.trace("ThisisaSlavetracemessage.");
log.debug("ThisisaSlavedebugmessage.");
log.info("ThisisaSlaveinfomessage.");
log.warn("ThisisaSlavewarnmessage.");
log.error("ThisisaSlaveerrormessage.");
}
}

我們想實現(xiàn)這樣的效果,首先日志要同時 輸出到控制臺 及 日志文件,且不同層級的代碼,輸出的日志層級也不同。那么我們可以對上述的xml做出一些調(diào)整:

因為是非Spring項目,所以 springProperty 這樣的標簽就不要用了,我們直接寫死一個日志文件地址即可。

 

去掉原有的那些root、logger標簽,我們自己新建兩個logger,用于兩個不同的層級。我們想里層輸出 debug 級別,外層輸出info 級別,我們可以這么設置。并且同時輸出到控制臺及日志文件









當我們運行Main.main的時候,就可以得到以下日志,slave 能輸出debug級別,Main 只能輸出 info及以上級別

09a7de5e-581f-11ee-939d-92fbcf53809c.png

4. 細節(jié)點

其實我們上面的演示,有兩個細節(jié)點,需要注意一下。一個就是我們的


使用了一個 additivity="false" 的屬性,這其實是因為 logger 這個標簽在鎖定某個目錄時,可能會發(fā)生層級關系。比如我們的兩個 logger, 一個針對的目錄是 com.zhanfu 另一個是 com.zhanfu.child ,后者就會被前者包含。

當我們的 com.zhanfu.child.Slave 打印日志時,當然會使用后者(更精確)的設置,但前者的設置還使用嗎?就依賴于 additivity=“false”,此處如果我們把 additivity="false" (該屬性默認值為true)去掉,再來打印日志

09b74f2e-581f-11ee-939d-92fbcf53809c.png

就會發(fā)現(xiàn),Slave 的日志打了兩遍,而且連 debug 級別的都打了兩遍,我們可以把這種邏輯理解為繼承,子類執(zhí)行一遍,父類還能在執(zhí)行一遍,但 leve 屬性還是會采用子類而非父類的。

另一點就是我們把 root 標簽刪除了,root 其實是一個頂級的 logger , 其他的logger都可以視為它的子類,如果那些logger存在沒涵蓋的地方,或其沒有指定 additivity="false" ,那最后root的設置就會被使用。比如我們將設置改為如下:












結果控制臺的輸出日志,Main會重復兩次,Slave 會重復三次,如下

09bffdea-581f-11ee-939d-92fbcf53809c.png

但是因為我們的 root 只配置了控制臺輸出,所以日志文件里還是不會變的

09dd5552-581f-11ee-939d-92fbcf53809c.png

2. Log4j 2

1. 引用

對于spring-boot項目,除了引用 Log4j 2 我們還需要先剔除 Logback 的引用,對于普通項目,我們只需直接引用即可。但注意我們的原則,通過 SLF4J 來使用 Log4j2,所以引用下面這個包


org.apache.logging.log4j
log4j-slf4j-impl
2.13.3

其內(nèi)包含 Log4j2 的實現(xiàn),和 SLF4J 的 API,如下:

09f0c9ca-581f-11ee-939d-92fbcf53809c.png

2. 配置

Log4j2 的配置邏輯和 logback 是類似的,只有些細節(jié)不同,比如Logger 的首字母大寫等等,最后我們寫下這樣一個 log4j2.xml




logs



























Properties

部分定義了一個 logPath 屬性,方便在其他地方引用。

Appenders

定義了兩個 Appender:Console 和 RollingFile,分別將日志輸出到控制臺和文件中。RollingFile 使用了 RollingFileAppender,并設置了日志滾動策略和默認的備份文件數(shù)量。

Loggers

定義了三個 Logger:com.zhanfu.child 的日志級別為 DEBUG,com.zhanfu 的日志級別為INFO,Root Logger 的日志級別為 WARN。并指定了兩個 Appender:Console 和 File。

3. 演示

由于我們的配置邏輯沒變,所以日志的結果還是一樣的:

0a02107c-581f-11ee-939d-92fbcf53809c.png0a2128ea-581f-11ee-939d-92fbcf53809c.png

3. 對比

Log4j2和Logback都是Java應用程序中最流行的日志框架之一。它們均具備高度的可配置性和使用靈活性,并提供了一系列有用的功能,例如異步日志記錄和日志過濾等。下面從配置遍歷性、功能性、性能等方面進行比較和總結。

配置遍歷性

Logback的配置文件格式相對簡單,易于閱讀和修改。它支持符號來引用變量、屬性和環(huán)境變量等。此外,它還支持條件日志記錄(根據(jù)日志級別、日志記錄器名稱或時間等),以及滾動文件的大小或日期等。

Log4j2的配置文件格式較復雜,但它在配置文件中提供了大量的選項來控制日志記錄。它支持在配置文件中直接聲明上下文參數(shù)、過濾器、輸出器和Appender等,這使得它的配置更加靈活。此外,Log4j2還支持異步日志記錄、日志事件序列化和性能優(yōu)化等。

總體來說,兩者都很好地支持了配置遍歷性,但Log4j2提供了更多的選項和更高的靈活性。

功能性

Logback提供了一系列基本的日志記錄功能,例如異步Appender、滾動文件和GZIP壓縮等。它還支持與SLF4J一起使用,可以很容易地與其他日志框架集成。

Log4j2提供了更多的高級功能,例如異步日志記錄、性能優(yōu)化和日志事件序列化等。它還支持Lambda表達式,可以使日志記錄器更加簡潔和易讀。此外,Log4j2還支持Flume和Kafka等大數(shù)據(jù)處理框架,可以方便地將日志記錄發(fā)送到這些框架中。

總體來說,Log4j2提供了更多的高級功能,并且可以更好地與大數(shù)據(jù)處理框架集成。

性能

Logback的性能很好,可以處理高吞吐量的日志記錄。它采用了異步記錄器,利用了多線程來提高性能。

Log4j2在性能方面更加強大。它使用了異步記錄器和多線程,還引入了RingBuffer數(shù)據(jù)結構和Disruptor庫來加速日志事件的傳遞和處理。這使得它比Logback具有更高的吞吐量和更低的延遲。

綜上所述,Log4j2在配置靈活性、功能性和性能方面都比Logback更為強大。但如果需要輕量級的日志框架或者只需要基本的日志記錄功能,Logback也是一個不錯的選擇

但如果我們同時引用了這兩者,會報錯嗎?還是會使用其中的某一個?


ch.qos.logback
logback-classic
1.2.12


org.apache.logging.log4j
log4j-slf4j-impl
2.13.3

可以看到,SLF4J 發(fā)現(xiàn)了系統(tǒng)中同時存在兩個插件框架,并最終選擇了使用 Logback

0a2a99b6-581f-11ee-939d-92fbcf53809c.png

總結

學習完本文,你應當對現(xiàn)在這幾個常用框架的有所了解,并能基礎應用了。此次我們沒有講源碼,也沒有深入的講其配置及進階使用,這些我們會在后面慢慢學習。但現(xiàn)在我希望你能知道的是。一定要寫好日志,一定要寫好日志,一定要寫好日志。重要的事情說三遍!這是區(qū)別新人和老鳥的一個重要依據(jù),也是讓自己排查問題更輕松的不二法門!

另外,現(xiàn)在很多中間件都自己引用了日志插件,我們作為一個整體工程在使用中間件時,要及時發(fā)現(xiàn)并解決插件沖突,避免我們自己的日志配置失效,這也是一個程序員該注意的點。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 應用程序
    +關注

    關注

    37

    文章

    3198

    瀏覽量

    57364
  • spring
    +關注

    關注

    0

    文章

    335

    瀏覽量

    14259
  • 日志
    +關注

    關注

    0

    文章

    129

    瀏覽量

    10593
  • Boot
    +關注

    關注

    0

    文章

    148

    瀏覽量

    35675
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84081

原文標題:忽視日志吃大虧,手把手教你玩轉 SpringBoot 日志

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Spring Boot如何實現(xiàn)異步任務

    Spring Boot 提供了多種方式來實現(xiàn)異步任務,這里介紹三種主要實現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring 提供的一種輕量級異步方法實現(xiàn)方式,它可以標記在方法上
    的頭像 發(fā)表于 09-30 10:32 ?1136次閱讀

    Spring Boot Starter需要些什么

    pulsar-spring-boot-starter是非常有必要的,在此之前,我們先看看一個starter需要些什么。 Spring Boot Starter spring-boot
    的頭像 發(fā)表于 09-25 11:35 ?633次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> Starter需要些什么

    啟動Spring Boot項目應用的三種方法

    所有的框架。Spring Boot作為Spring MVC的升級版,但是卻沒有太多的聯(lián)系,換句話說你學習Spring
    發(fā)表于 01-14 17:33

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構建“非常容易創(chuàng)建、獨立、產(chǎn)品級別的基于Spring的應用”。這些應
    發(fā)表于 12-16 07:57

    java 日志框架Spring Boot分析

    引言:我們需要在已有的微服務代碼中添加日志功能,用于輸出需要關注的內(nèi)容,這是最平常的技術需求了。由于我們的微服務代碼是基于SpringBoot開發(fā)的,那么問題就轉換為如何在Spring Boot
    發(fā)表于 09-28 14:58 ?0次下載

    Spring Boot從零入門1 詳述

    在開始學習Spring Boot之前,我之前從未接觸過Spring相關的項目,Java基礎還是幾年前自學的,現(xiàn)在估計也忘得差不多了吧,寫Spring
    的頭像 發(fā)表于 12-10 22:18 ?544次閱讀

    學習Spring Boot 嵌入式服務器

    嵌入式Web服務器每個Spring Boot Web應用程序都包含一個嵌入式Web服務器。此功能會導致許多操作方法問題,包括如何更改嵌入式服務器以及如何配置嵌入式服務器。本節(jié)回答了這些問題。摘譯自
    發(fā)表于 10-20 15:36 ?7次下載
    <b class='flag-5'>學習</b><b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 嵌入式服務器

    Spring Boot特有的實踐

    Spring Boot是最流行的用于開發(fā)微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業(yè)開發(fā)中使用Spring Boot所采用的最佳實踐。這些內(nèi)容是基于我的個人經(jīng)驗
    的頭像 發(fā)表于 09-29 10:24 ?803次閱讀

    強大的Spring Boot 3.0要來了

    來源:OSC開源社區(qū)(ID:oschina2013) Spring Boot 3.0 首個 RC 已發(fā)布,此外還為兩個分支發(fā)布了更新:2.7.5 2.6.13。 3.0.0-RC1: https
    的頭像 發(fā)表于 10-31 11:17 ?1423次閱讀

    Spring Boot Web相關的基礎知識

    上一篇文章我們已經(jīng)學會了如何通過IDEA快速建立一個Spring Boot項目,還介紹了Spring Boot項目的結構,介紹了項目配置文件pom.xml的組成部分,并且撰寫了我們
    的頭像 發(fā)表于 03-17 15:03 ?564次閱讀

    Spring Boot日志框架使用

    目前市面上常見的日志框架有:slf4j(Simple Logging Facade for Java)、logback、log4j、log4j2、commons-logging(Spring默認日志框架)、JUL(java.ut
    的頭像 發(fā)表于 06-02 10:59 ?851次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的<b class='flag-5'>日志</b>框架使用

    Spring Boot Actuator快速入門

    一下 Spring Boot Actuator ,學習如何在 Spring Boot 2.x 中使用、配置和擴展這個監(jiān)控工具。
    的頭像 發(fā)表于 10-09 17:11 ?528次閱讀

    Spring Boot啟動 Eureka流程

    在上篇中已經(jīng)說過了 Eureka-Server 本質(zhì)上是一個 web 應用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 E
    的頭像 發(fā)表于 10-10 11:40 ?709次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>啟動 Eureka流程

    Spring Boot的啟動原理

    可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統(tǒng)的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?542次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>的啟動原理

    Spring Boot 的設計目標

    什么是Spring Boot Spring BootSpring 開源組織下的一個子項目,也是 S
    的頭像 發(fā)表于 10-13 14:56 ?488次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b> 的設計目標