logback官方文檔中文翻譯第十三章:從 log4j 遷移

第十三章:從 log4j 遷移

本章涉及到的內(nèi)容為將 log4j 的組件鳍怨,例如 appender 或者 layout 遷移到 logback-classic玻佩。

僅僅調(diào)用 log4j 客戶端 API 的軟件钻蹬,也就是 org.apache.log4j 包中 Logger 或者 Category 類酷师,可以通過(guò) SLF4J 遷移工具使用 SLF4J 來(lái)進(jìn)行自動(dòng)遷移珠闰。為了將 log4j.property 文件轉(zhuǎn)換為同等的 logback 配置惜浅,你可以使用 log4j.properties 轉(zhuǎn)換器

在某種程度上來(lái)說(shuō)伏嗜,log4j 與 logback-classic 密切相關(guān)坛悉。核心組件杭朱,logger,appender 以及 layout 在兩個(gè)框架中都存在吹散,并且目的一致弧械。類似的,最重要的內(nèi)部數(shù)據(jù)結(jié)構(gòu)空民,叫做 LoggingEvent刃唐,在兩個(gè)框架中非常相似,但是實(shí)現(xiàn)完全不同界轩。最主要的是画饥,在 logback-classic 中,LoggingEvent 實(shí)現(xiàn)了 ILoggingEvent 接口浊猾。遷移 log4j 組件到 logback-classic 最大的改變?cè)谟?LoggingEvent 類相關(guān)的實(shí)現(xiàn)不同抖甘。但是,請(qǐng)放心葫慎,這些變化是有限的衔彻。如果你盡了最大的努力仍然不能將 log4j 組件遷移到 logback-classic,你可以通過(guò) logback 開(kāi)發(fā)郵件列表來(lái)進(jìn)行提問(wèn)偷办。logback 的開(kāi)發(fā)者應(yīng)該可以提供指導(dǎo)艰额。

遷移 log4j 的 layout

假設(shè)我們現(xiàn)在要遷移一個(gè)簡(jiǎn)單的,名叫 TrivialLog4jLayout 的 log4j layout椒涯,它將日志事件中的消息作為格式化消息返回柄沮。代碼如下:

package chapters.migrationFromLog4j;

import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;

public class TrivialLog4jLayout extends Layout {

  public void activateOptions() {
    
  }

  public String format(LoggingEvent loggingEvent) {
    return loggingEvent.getRenderedMessage();
  }

  public boolean ignoresThrowable() {
    return true;
  }
}

等價(jià)的 logback-classic TrivialLogbackLayout 如下:

package chapters.migrationFromLog4j;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.LayoutBase;

public class TrivialLogbackLayout extends LayoutBase<ILoggingEvent> {

  public String doLayout(ILoggingEvent loggingEvent) {
    return loggingEvent.getMessage();
  }
}

正如你所見(jiàn),在 logback-classic layout 中废岂,格式化的方法叫做 doLayout祖搓,而在 log4j 中叫 format()。因?yàn)樵?logback-classic 中沒(méi)有等價(jià)的方法湖苞,所以 ignoresThrowable() 方法則不需要拯欧。logback-classic layout 必須繼承 LayoutBase<ILoggingEvent> 類。

activateOptions() 方法的優(yōu)點(diǎn)值得進(jìn)一步討論袒啼。在 log4j 中哈扮,一個(gè) layout 有它自己的 activateOptions() 方法,通過(guò) log4j 的配置程序蚓再,也就是 PropertyConfiguratorDOMConfigurator滑肉,會(huì)在 layout 所有的選項(xiàng)都設(shè)置完之后調(diào)用。因此摘仅,layout 有機(jī)會(huì)去檢查它的所有的選項(xiàng)是否一致靶庙,如果是,那么開(kāi)始進(jìn)行初始化娃属。

在 logback-classic 中六荒,layout 必須實(shí)現(xiàn) LifeCycle 接口护姆,該接口包含了一個(gè) start() 方法。這個(gè) start() 方法相當(dāng) log4j 中的 activateOptions() 方法掏击。

遷移 log4j 的 appender

遷移 appender 與遷移 layout 相當(dāng)?shù)念愃坡言怼O旅媸怯幸粋€(gè)名為 TrivialLog4jAppender 的簡(jiǎn)單 appender,它會(huì)在控制臺(tái)輸出由它的 layout 返回的字符串砚亭。

package chapters.migrationFromLog4j;

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;


public class TrivialLog4jAppender extends AppenderSkeleton {

  protected void append(LoggingEvent loggingevent) {
    String s = this.layout.format(loggingevent);
    System.out.println(s);
  }

  public void close() {
    // nothing to do
  }

  public boolean requiresLayout() {
    return true;
  }
}

在 logback-classic 中等價(jià)的寫(xiě)法為 TrivialLogbackAppender灯变,如下:

package chapters.migrationFromLog4j;

import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;

public class TrivialLogbackAppender extends AppenderBase<ILoggingEvent> {

  @Override
  public void start() {
    if (this.layout == null) {
      addError("No layout set for the appender named [" + name + "].");
      return;
    }
    super.start();
  }

  @Override
  protected void append(ILoggingEvent loggingevent) {
    // AppenderBase.doAppend 只會(huì)在這個(gè) appender 成功啟動(dòng)之后調(diào)用這個(gè)方法
    String s = this.layout.doLayout(loggingevent);
    System.out.println(s);
  }
}

比較這兩個(gè)類,你會(huì)發(fā)現(xiàn) append() 方法的內(nèi)容沒(méi)有改變捅膘。requiresLayout 方法在 logback 中沒(méi)有用到添祸,所以它可以被移除。在 logback 中寻仗,stop() 方法與 log4j 中的 close() 方法等價(jià)刃泌。然而,logback-classic 中的 AppenderBase 包含一個(gè)沒(méi)有實(shí)現(xiàn)的 stop 方法署尤,但是在這個(gè)簡(jiǎn)單的 appender 已經(jīng)足夠了耙替。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沐寺,隨后出現(xiàn)的幾起案子林艘,更是在濱河造成了極大的恐慌,老刑警劉巖混坞,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钢坦,居然都是意外死亡究孕,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)爹凹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厨诸,“玉大人,你說(shuō)我怎么就攤上這事禾酱∥⒊辏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵颤陶,是天一觀的道長(zhǎng)颗管。 經(jīng)常有香客問(wèn)我,道長(zhǎng)滓走,這世上最難降的妖魔是什么垦江? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮搅方,結(jié)果婚禮上比吭,老公的妹妹穿的比我還像新娘绽族。我一直安慰自己,他們只是感情好衩藤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布吧慢。 她就那樣靜靜地躺著,像睡著了一般赏表。 火紅的嫁衣襯著肌膚如雪娄蔼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天底哗,我揣著相機(jī)與錄音岁诉,去河邊找鬼凛澎。 笑死泉瞻,一個(gè)胖子當(dāng)著我的面吹牛脐区,可吹牛的內(nèi)容都是我干的企软。 我是一名探鬼主播麸折,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼借笙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼储笑!你這毒婦竟也來(lái)了孕暇?” 一聲冷哼從身側(cè)響起炼列,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤只搁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后俭尖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氢惋,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年稽犁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焰望。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡已亥,死狀恐怖熊赖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虑椎,我是刑警寧澤震鹉,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站捆姜,受9級(jí)特大地震影響传趾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娇未,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一墨缘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦镊讼、人聲如沸宽涌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卸亮。三九已至,卻和暖如春玩裙,著一層夾襖步出監(jiān)牢的瞬間兼贸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工吃溅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溶诞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓决侈,卻偏偏與公主長(zhǎng)得像螺垢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赖歌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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