1. 程式人生 > 其它 >Spring日誌與SpringBoot日誌

Spring日誌與SpringBoot日誌

本篇意為說明Spring預設日誌實現與SpringBoot預設日誌實現。

1、日誌

在這之前,我們應該先了解一些日誌框架。

具體可以看我這篇隨筆:https://www.cnblogs.com/daihang2366/p/15201347.html

你得了解JCL、SLF4J、JUL、LogBack。

2、Spring5.x

在Spring5.x中,預設日誌實現為JCL+JUL(其他版本未驗證)。

證明

開啟Spring原始碼,隨便找一個類中獲取日誌Log的屬性。

進入其getLog方法中:

在進入下一層方法中:

進入JavaUtilDelegate.createLog方法中後就能發現其是使用的JUL。

那麼Spring是如何根據我們的依賴項來切換日誌實現的呢?

注意看,在LogFactory的靜態程式碼塊當中,嘗試了初始化log4j、slf4j,如果有這些類,就設定其指定的值到logApi中,供getLog中switch方法使用,那麼既然都使用slf4j橋接器了,那具體能使用哪種日誌實現就很容易擴充套件了。

3、SpringBoot

在SpringBoot2.5.7中,預設日誌實現為SLF4J+LogBack(其他版本未驗證)。

進入LogFactory.getLog方法中檢視:

再進入LogAdapter.createLog方法當中:

此時注意logApi的值為SLF4J_LAL,在spring5.x中logApi是沒有值的,直接走進了default中,而default中則是使用JUL,這裡可以看一個Slf4jAdapter.createLocationAwareLog方法中返回的是logBack。

可以看到,Log物件那個是Slf4J橋接器,實際其使用的log為logback的日誌物件。