2011-07-08 34 views

回答

7

在每類中的記錄是更好,更易於擴展。 原因是在一個類中定義一個記錄器很容易將記錄器的配置(格式,持久性)與真實日誌記錄API分開。 我曾與多個大型複雜的java軟件(> 100萬行代碼)合作,他們都使用每個類的一個記錄器。

另外,定義「每個類一個記錄器」並不意味着每個類都使用不同的記錄器實例。

class Foo { 
    private static final Logger log = Logger.getLogger(Foo.class); 
} 


class Bar { 
    private static final Logger log = Logger.getLogger(Bar.class); 
} 

上面使用的兩個記錄器是否使用相同的記錄器實例,如果不能確定從上面的代碼。通常情況下,配置位置(屬性文件或程序中)指定Foo和Bar中的記錄器是否共享記錄器。

因此,「在每類中的記錄」只是在每類中定義一個記錄,但這種記錄器可以從不同類別

+0

BTW:我們也使用log4j。即使在eclipse應用程序中,我們也會使用每個類的一個記錄器來記錄和適應eclipse的構建日誌記錄機制(這是因爲我們需要在eclipse應用程序和獨立應用程序中使用插件代碼)。 –

+0

很好,澄清答案。謝謝。 –

11

我爲所有的技術方面使用一個記錄器,記錄,跟蹤,調試,方法輸入/輸出(private static final...)。我經常使用共享記錄器的功能方面,例如。審計線索,安全性;公共類中的公共Logger。

我不知道標準或一般最佳實踐,但這種方法對我很好。

+0

+1這就是它提到了相同的記錄器實例.... – woliveirajr

0

我建議你使用一些框架進行日誌記錄,你可以找到很多它們,是最受歡迎的log4j之一,它會爲你節省很多努力試圖重新發明輪子,因爲它們已經與大多數最佳實踐都已實施。

如果您使用Log4J之類的日誌框架,常見的最佳做法是在每個類的靜態變量中檢索記錄器。

class Foo { 
    private static final Logger log = Logger.getLogger(Foo.class); 
} 

對於大多數日誌框架可以定義日誌級別(WARN,ERROR,DEBUG)以及圖案的追加程序,所以你可以存儲在不同的文件由不同的指標分析過濾的消息。

還與這些框架,你可以輕鬆地設置之類的東西日誌輪換,這是非常有用的

+0

目前我使用log4j。 –

+0

爲什麼需要最終? –

+0

因爲你只需要初始化一次。沒有意義實例化更多,並使用最終你確保你不會錯誤地做。 – jasalguero

相關問題