2016-10-14 20 views
0

我正在使用log4j2替換我的java應用程序中的舊日誌記錄系統。 我對記錄器名稱有點困惑。記錄器名稱是否與我們在xml文件中定義的相同,並且應該與logmanager.getlogger (arg)的參數相同?每個java類中的記錄器名稱

我也不知道是否應該在每個類的頂部定義記錄器,並且它們是否應該具有不同的名稱? 例如有一個包loginlogin.ui .

登錄有5個文件(類)內部和UI也。我想登錄整個登錄包。但是我在如何定義loggers以及java文件上的什麼位置以及記錄器名稱應該使用哪些模式方面遇到問題。

Logger logger = logmanager.getlogger(?)

Logger對象可以在每個文件相同的名稱? 謝謝。

+0

也許看看[API](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html)或[手動](https:// logging.apache.org/log4j/1.2/manual.html#Logger_hierarchy)已經回答你的問題。 – SubOptimal

+0

記錄器對象可以在每個文件中具有相同的名稱嗎? - 是 _Should_ Logger對象在每個文件中都有相同的名稱? - 否 – Mahesh

+0

「Logger對象應該在每個文件中具有相同的名稱嗎? - 否」 - 因爲在日誌文件中無法看到輸出來自記錄器名稱的位置。但有時候這可能是有道理的。我使用它來通過API跟蹤MessageObjects,因此我可以獨立於「普通」應用程序日誌記錄打開/關閉/詳細記錄這部分。 – Fildor

回答

0

您可以使用

private static Logger logger = LogManager.getLogger(YourClassName.class) 

如果你只有設置一個根記錄,這已經從那裏出現的消息。 如果您想讓特定軟件包中的記錄器與rootlogger配置不同(例如不同的日誌級別),那麼您必須在log4j2的配置中創建一個類似該軟件包的記錄器。您可以參考log4j2配置手冊瞭解如何執行此操作。

該包和後續包中的所有類都將映射到該記錄器。

實施例:

配置有根記錄和記錄器「my.package」與LogManager.getLogger(YourClass.class)其中YourClass是在包my.package或在一些包my.package.xyz將使用記錄器「my.package」創建

然後記錄器。 使用例如LogManager.getLogger("SPECIALLOGGER")LogManager.getLogger(OtherPackageClass.class)創建的記錄器,其中OtherPackageClass位於包「my.otherpackage」中,將回退到根記錄器。我也推薦看看log4j manual

+0

謝謝你的回答。所以如果我有嵌套包,我仍然使用LogManager.getLogger(YourClass。類)在每個單獨的java文件的頂部? – user1871689

+0

我曾經從包中的一個文件導入記錄器到其他文件並使用相同的東西。 – user1871689

+0

這是推薦的方式(每個類的靜態記錄器)。這樣,您以後可以在不觸及源代碼的情況下爲子包添加記錄器配置。 – Fildor