爲什麼 slf4j 被推薦使用

參考文章:
Simplifying the distinction between SL4J and commons logging

日誌那點事兒——slf4j源碼剖析
slf4j門面模式實現原理

SLF4J 與 CommonsLogging 原理對比

在這裏插入圖片描述

SLF4J 工作原理

如上圖示意

  • slf4j 會在 classpath 中進行掃描, 尋找可用於 slf4j 綁定的日誌實現類庫
    • 如果只找到一個可用於綁定的日誌類庫, 就會正常進行綁定, 在運行過程中, 將所有面向 slf4j 的調用翻譯爲對應的日誌實現類庫調用
    • 如果存在多個可用於綁定日誌類庫, 就會提示報錯

Commons Logging工作原理

如上圖示意

  • Commons Logging 有一個神奇的邏輯層, 會首先去嘗試在 commons-logging.properties 配置文件中查找是否已經設置了 org.apache.commons.logging.log property 這一屬性 或者在應用內存中查找是否已經通過 Commons Logging API 設置過這一屬性。
    • 如果找到, 則用 Commons Logging 的日誌實現類
    • 如果沒找到, 在 classPath 中查找是否有 log4j 實現, 有則使用
    • 如果還沒找到, 直接嘗試用 JDK1.4 以上的內置日誌實現
    • 如果JDK 低於1.4, 則 使用 CommonsLog 中的SimpleLog 實現

優劣對比

SLF4J 的優點在於其策略足夠簡單, 在擁有maven, gradle 等此類依賴管理工具時, 我們可以很方便的確定, 最終日誌的實現

Common Logging 的優點在於當類路徑中存在多個日誌實現庫(jar)時 , 它有一個確定的規則最終選出一個實現類, 而不會因爲多個實現類庫的共同存在而報錯無法完成綁定

由於目前maven, gradle 等構件工具完全可以高效清晰地幫助我們管理項目的依賴, SLF4J 在綁定策略的簡單性上,給我們減少了很多出錯的可能, 以及查錯的成本, 綜合來看, SLF4J 以期簡單的特定更容易被廣泛使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章