2010-11-09 26 views
2

我們必須在我們的應用程序中引入日誌記錄。我們決定使用log4j是個不錯的選擇。也有人告訴我們應該使用singleton模式來使用log4j,有人會強調如何以及爲什麼?如何在代碼中使用log4j?

+1

考慮slf4j而不是log4j。 – DwB 2010-11-09 13:57:29

+0

什麼是slf4j?它有什麼不同.. – 2010-11-09 14:13:43

回答

5

如果您是第一次引入日誌記錄,那麼請使用Logback。使用配置文件suggested here並將其添加到類路徑中。記錄將被自動配置。

+0

你爲什麼第一次提到。第一次如何有幫助? – 2010-11-09 14:01:18

+1

即使世界已經進步了,有些人仍然被log4j困住了;-)。一旦你有一些工作,並且團隊對此感到滿意,引入更好的替代方案確實很難。因此,在引入新的框架/技術時,儘可能進行盡職調查並尋找更好的選擇。如何查看此處以找出Logback更好的原因:http://logback.qos.ch/reasonsToSwitch.html – 2010-11-09 14:04:47

6

在單模式中,Logger字段是靜態的類:

public class SomeAwesomeClass { 

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

} 

另一種方法是使Logger場非靜態(即,SomeAwesomeClass每個實例保持對所述Logger一個參考):

public class SomeAwesomeClass { 

    private final Logger logger = Logger.getLogger(SomeAwesomeClass.class); 

} 

我不認爲它使一個很大的區別,你選擇哪條路線,因爲我相信的Log4j將不斷返回相同的Logger實例的每個實例SomeAwesomeClass。真的,這只是不必要的對象引用,所以你不妨使用單例模式。

然而,如果你這樣做非單例模式成爲必要:

public class SomeAwesomeClass { 

    private final Logger logger = Logger.getLogger(getClass()); 

    public void doSomething() { 
     log.info("Doing something"); 
    } 

} 

public class AwesomerClass extends SomeAwesomeClass { 
} 

後來......

SomeAwesomeClass o = new AwesomerClass(); 
o.doSomething(); 

在這個例子中,logger字段對應AwesomerClass,而不是SomeAwesomeClass

2

之所以單身,有時優選的是,我們要記錄儀每個應用程序只有一個實例,否則,記錄程序的每一個新實例,將有一個新創建的文件或現有日誌的覆寫文件。

至於Log4J是否是一個不錯的選擇將取決於你的研究/經驗與不同的記錄器可用。這完全取決於你的偏好(我總是使用Log4J,因爲我發現它更容易配置,但我不偏向任何記錄器)。

著名的在那裏是:

  • Log4J的
  • SLF4J
  • 的logback
  • Java的自己的日誌....

有網頁,其中顯示一些例子你如何使用記錄器。 Here是Log4J vs SLF4J的簡要比較。

相關問題