2018-11-12



JAVA日志那點(diǎn)事


前言

日志這東西在語言里算基礎(chǔ)組件了吧,可惜Java界第三方框架向來比原生組件好用也是事實(shí),缺點(diǎn)是框架太多混戰(zhàn)江湖,今天我們就理一理這些日志框架。Java的日志框架分為門面(Facade),或者叫通用日志接口,還有日志實(shí)現(xiàn)。日志接口不用說,就是定下的日志方法規(guī)范,需要具體日志組件去實(shí)現(xiàn)的(為啥Sun當(dāng)年沒有定義這東西,看看JPA、JDBC、JMS這些規(guī)范定義的多好,或者定義了被拋棄了?)。日志實(shí)現(xiàn)就是具體的日志組件了,可以實(shí)現(xiàn)日志打印到控制臺(tái)、文件、數(shù)據(jù)庫等等。下面咱們就具體說說這些東西。

Java日志框架分類

日志門面(Facade)

Slf4j

全稱Simple Logging Facade for JAVA,真正的日志門面,只提供接口方法,當(dāng)配合特定的日志實(shí)現(xiàn)時(shí),需要引入相應(yīng)的橋接包

Common-logging

Apache提供的一個(gè)通用的日志接口,common-logging會(huì)通過動(dòng)態(tài)查找的機(jī)制,在程序運(yùn)行時(shí)自動(dòng)找出真正使用的日志庫,自己也自帶一個(gè)功能很弱的日志實(shí)現(xiàn)。

差別:

Common-logging動(dòng)態(tài)查找日志實(shí)現(xiàn)(程序運(yùn)行時(shí)找出日志實(shí)現(xiàn)),Slf4j則是靜態(tài)綁定(編譯時(shí)找到實(shí)現(xiàn)),動(dòng)態(tài)綁定因?yàn)橐蕾嘋lassLoader尋找和載入日志實(shí)現(xiàn),因此類似于OSGI那種使用獨(dú)立ClassLoader就會(huì)造成無法使用的情況。(呵呵,我一個(gè)插件用一個(gè)日志框架不行啊,土豪多任性,不過說實(shí)話,沒用過OSGI,這個(gè)我還真沒有概念)

Slf4j支持參數(shù)化的log字符串,避免了之前為了減少字符串拼接的性能損耗而不得不寫的if(logger.isDebugEnable()),現(xiàn)在你可以直接寫:logger.debug(“current user is: {}”, user)。

日志實(shí)現(xiàn)

Log4j

Log4j可能是Java世界里最出名的日志框架了,支持各種目的地各種級(jí)別的日志輸出,從我剛接觸日志就知道這個(gè)框架(呵呵,我一直不知道還有JDK Logging這個(gè)東西)。最近(也不近了……)Log4j2發(fā)布正式版了,沒看到誰用,聽說也很不錯(cuò)。

LogBack

Log4j作者的又一力作(聽說是受不了收費(fèi)文檔搞了個(gè)開源的,不需要橋接包完美適配Slf4j),個(gè)人感覺迄今為止最棒的日志框架了,一直都在用,配置文件夠簡(jiǎn)潔,性能足夠好(估計(jì)是看自己的Log4j代碼差勁了,更新不能解決問題,直接重構(gòu)了)。

JDK Logging 從JDK1.4開始引入,不得不說,你去Google下這個(gè)JDK自帶的日志組件,并不如Log4j和LogBack之類好用,木有配置文件,日志級(jí)別不好理解,想順心的用估計(jì)還得自己封裝下,總之大家已經(jīng)被Log4j慣壞了,JDK的設(shè)計(jì)并不能被大家認(rèn)同,唯一的優(yōu)點(diǎn)我想就是不用引入新額jar包了。

為什么會(huì)有門面

看了以上介紹,如果你不是混跡(深陷)Java多年的老手,估計(jì)會(huì)蒙圈兒了吧,那你肯定會(huì)問,要門面干嘛。有了手機(jī)就有手機(jī)殼、手機(jī)膜,框架也一樣,門面的作用更多的還是三個(gè)字:解耦合。說白了,加入一個(gè)項(xiàng)目用了一個(gè)日志框架,想換咋整啊?那就一行一行的找日志改唄,想想都是噩夢(mèng)。于是,門面出來了,門面說啦,你用我的格式寫日志,把日志想寫哪兒寫哪兒,例如Slf4j-api加上后,想換日志框架,直接把橋接包一換就行。方便極了。

說實(shí)話,現(xiàn)在Slf4j基本可以是Java日志的一個(gè)標(biāo)準(zhǔn)了,按照它寫基本可以實(shí)現(xiàn)所有日志實(shí)現(xiàn)通吃,但是就有人不服,還寫了門面的門面(沒錯(cuò),這個(gè)人就是我)。

門面的門面

如果你看過Netty的源碼,推薦你看下io.netty.util.internal.logging這個(gè)包里內(nèi)容,會(huì)發(fā)現(xiàn)Netty又對(duì)日志封裝了一層,于是靈感來源于此,我也對(duì)各大日志框架和門面做了封裝。

Hutool-log模塊

無論是Netty的日志模塊還是我的Hutool-log模塊,思想類似于Common Logging,做動(dòng)態(tài)日志實(shí)現(xiàn)查找,然后找到相應(yīng)的日志實(shí)現(xiàn)來寫入日志,核心代碼如下:

public static Class

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,237評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,957評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,248評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,356評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,081評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,485評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,534評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,720評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,263評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,025評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,204評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,787評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,461評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,874評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,105評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,945評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,205評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • log4j, log4j2, slf4j, logback關(guān)系 log4j是由Apache開發(fā)的一套元老級(jí)日志框架...
    rainybowe閱讀 1,667評(píng)論 0 4
  • 歷史 log4j可以當(dāng)之無愧地說是Java日志框架的元老,1999年發(fā)布首個(gè)版本,2012年發(fā)布最后一個(gè)版本,20...
    kelgon閱讀 10,181評(píng)論 3 53
  • 對(duì)于Java的日志框架,你也許會(huì)經(jīng)常看到這些名詞: Log4j、Log4j2 Logback Slf4j JCL ...
    NoahU閱讀 3,966評(píng)論 0 15
  • 在項(xiàng)目開發(fā)過程中,我們可以通過 debug 查找問題。而在線上環(huán)境我們查找問題只能通過打印日志的方式查找問題。因此...
    Java架構(gòu)閱讀 3,495評(píng)論 2 41
  • 概述 在項(xiàng)目開發(fā)中,為了跟蹤代碼的運(yùn)行情況,常常要使用日志來記錄信息。在Java世界,有很多的日志工具庫來實(shí)現(xiàn)日志...
    靜默虛空閱讀 1,875評(píng)論 1 9