天天看點

Log4j使用技巧——讓子類使用父類中定義的Logger

關于Log4j,是一個很龐大的話題,在這裡,我不能對其特點和使用方法進行一一描述,隻想記錄自己在使用Log4j開發項目的過程中遇到的一些問題和自己的解決方案。

  在項目中,有時候會遇到這麼一種情況,我們需要記錄一些類的使用情況,在類的聲明中,我們會如此聲明一個logger:

  private static final Logger logger=Logger.getLogger(MyClass.class);

  然後再用這個logger來列印我們關心的資訊。這種方法一直都很不錯在我們的類比較少的情況下。不過在類大量增加時,我們發現這種方法并不是一個好的方法,它使我們的工程看上去臃腫不堪,于是,我們必須采用一種簡潔的方法來替換它,確定其能夠讓我們的程式看起來舒服一些。

  首先定義一個父類,讓logger作為其的一個成員變量,類型可以為protected或default;其次在父類的構造函數裡初始化該logger:

  logger=Logger.getLogger(getClass().getName());

  使用這種方法,其子類就可以直接引用父類中定義的logger來記錄我們所關心的資訊,此外,更重要的是,使用getClass().getName(),可以使我們成功地将logger命名為子類的名稱,同樣能夠豐富我們的調試資訊,幫助我們定位問題所在。

  相關代碼如下:

//父類

public abstract class Parent {

  protected Logger logger =null ;   

  public Parent(){

    logger=Logger.getLogger(getClass().getName());

  }

}

//子類

public class Son extends Parent {   

  public void test(){

    logger.info("successful!");

  }   

public static void main(String[] args) {     

      (new Son()).test();     

  本文轉自 cuiyingfeng 51CTO部落格,原文連結:http://blog.51cto.com/cuiyingfeng/6625,如需轉載請自行聯系原作者