天天看點

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)

之前已經詳細、全面地介紹了 Log4j,相信小夥伴們已經完全掌握了。那我在讀嵩山版的阿裡巴巴開發手冊(沒有的小夥伴,記着找我要)的時候,就發現了一條「強制」性質的日志規約:

應用中不可以直接使用日志系統(Log4j、Logback)中的 API,而應該使用日志架構中的 API,比如說 SLF4J,使用門面模式的日志架構,有利于維護和統一各個類的日志處理方式。

(為什麼我把這段文字手敲了下來呢,因為我發現阿裡巴巴開發手冊上的有語病,瞧下面紅色标出的部分)

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)

(維護和統一,把統一放在最後面讀起來真的是别扭,和的有點牽強,請問手冊的小編是數學老師教的國文吧?)

那看到這條強制性的規約,我就忍不住想要問:“為什麼阿裡巴巴開發手冊會強制使用 SLF4J 作為 Log4J 的門面擔當呢?”究竟這背後藏了什麼“不可告人”的秘密?

(請小夥伴們自行配上 CCTV 12 台的那種 BGM)

PS:順帶給小夥伴們普及一點小知識,阿裡巴巴開發手冊上出現的 Jakarta 其實是 Apache 軟體基金會下的一個開源項目。其實 Commons 是以前隸屬于 Jakarta,現在是作為 Apache 下的一個單獨項目,阿裡巴巴開發手冊上的描述已經不太恰當了,換成是 Apache Commons Logging 會更合适一點。

(忍不住又給阿裡巴巴開發手冊挑了一個毛病,請原諒我“一絲不苟”的做事态度)

01、SLF4J 是什麼

SLF4J 是 Simple Logging Facade for Java 的縮寫(for≈4),也就是簡易的日志門面,以外觀模式(Facade pattern,一種設計模式,為子系統中的一組接口提供一個統一的高層接口,使得子系統更容易使用)實作,支援 java.util.logging、Log4J 和 Logback。

SLF4J 的作者就是 Log4J 和 Logback 的作者,他的 GitHub 首頁長下面這樣:

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)

一股秋風瑟瑟的清冷感撲面而來,有沒有?可能巨佬不屑于維護他的 GitHub 首頁吧?我的 GitHub 首頁夠凄慘了,沒想到巨佬比我還慘,終于可以吹牛逼地說,“我,沉默王二,GitHub 首頁比 SLF4J、Log4J 和 Logback 的作者 Ceki Gulcu 綠多了。。。。。。”

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)

1996 年初,歐洲安全電子市場項目決定編寫自己的跟蹤 API,最後該 API 演變成了 Log4j,已經推出就備受寵愛。

2002 年 2 月,Sun 推出了自己的日志包 java.util.logging(可稱 JUL),據說實作思想借鑒了 Log4j,畢竟此時的 Log4j 已經很成熟了。

2002 年 8 月,Apache 就推出了自己的日志包,也就是阿裡巴巴開發手冊上提到的 JCL(Jakarta Commons Logging)。JCL 的野心很大,它在 JUL 和 Log4j 的基礎上提供了一個抽象層的接口,友善使用者在 JUL 和 Log4j 之間切換。

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)

但 JCL 好像并不怎麼招人喜歡,有人是這樣抱怨的:

阿裡巴巴開發手冊強制使用SLF4J作為門面擔當的秘密,被我發現了(1)