2012-05-22 199 views
0

(a)如何爲每個應用程序實現一個Logger實例,而不是每個Class的一個Logger實例。 (b)我們可以定製堆棧跟蹤以僅打印發生錯誤的行號及其Java類名稱。登錄web應用程序

感謝

回答

1

通常情況下,你必須每班記錄器的設置,因爲這是一個很好的邏輯組件。線程已經是日誌消息的一部分(如果你的過濾器顯示它們),那麼以這種方式切分記錄器可能是多餘的。

關於基於應用程序或圖層的記錄器,問題是您必須找到一個位置來粘貼該記錄器對象。沒有什麼大不了的。更大的問題是,某些類可能會在多個應用程序的多個層次上使用......可能很難讓您的記錄器正確。或者至少棘手。

...你想要的最後一件事是你的日誌設置中的錯誤假設。

如果您關心應用程序和圖層,並且有簡單的分隔點,NDC就是您的選擇。代碼有時可能有點過分,但我不知道有多少次我通過精確的上下文堆棧保存,顯示Foo.bar()是從Y層的應用程序X調用的。

策略最常用的是爲每個類創建一個記錄器。如果你創建新的線程給他們一個有用的名字,所以他們的日誌很容易區分。

創建每班記錄儀具有能夠打開/關閉日誌記錄在你的類的封裝結構的好處:

log4j.logger.org.apache = INFO 
log4j.logger.com.example = DEBUG 
log4j.logger.com.example.verbose = ERROR 

上面將設置所有的Apache庫代碼INFO水平,從登錄交換機您自己的代碼爲DEBUG級別,但詳細軟件包除外。

0

(a)中定義相同的類別getLogger()的所有調用:

// Create a logger per class:  
static Logger log = Logger.getLogger(MyClass.class); 

// Use the same logger for the whole application: 
// use this line in all your classes: 
static Logger log = Logger.getLogger("YourLogCategory"); 

HTH。

+0

謝謝你tomkani – venkiboss