Spring日誌與SpringBoot日誌
阿新 • • 發佈:2021-12-23
本篇意為說明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的日誌物件。