簡體   English   中英

當我合並使用Log4j 2的庫時,java.util.logging停止工作

[英]java.util.logging stops working when I incorporate a library that uses Log4j 2

我有一個使用java.util.logging API記錄消息的現有應用程序。 據我所知,框架中沒有用於它的配置文件,盡管有一些代碼可以創建文件追加器。 當我運行應用程序時,我將日志消息發送到控制台和文件。

現在,我需要合並一個使用Log4j 2的庫。這樣做時,我將從主應用程序中丟失控制台日志記錄(盡管日志消息仍然會寫入以編程方式創建的文件附加器中)。

我可以想象,由於文件附加器在原始應用程序中運行,因此我可以通過在主應用程序中以編程方式創建控制台附加器來解決我的問題。 但是,我不知道這是對的還是對立。

所以,我的問題是:關於使java.util.logging和Log4j 2互操作,我需要了解一些常規知識嗎? 如果原始應用程序未正確編碼或未按照最佳實踐進行編碼,則可以對其進行更改。

現在,我需要合並一個使用Log4j 2的庫。這樣做時,我將從主應用程序中丟失控制台日志記錄(盡管日志消息仍然會寫入以編程方式創建的文件附加器中)。

如果從代碼中調用install方法,則Log4jBridgeHandler將刪除處理程序 您始終可以打印日志樹以查看連接了哪些處理程序,或者可以附加諸如JConsole之類的工具來檢查是否有第3方庫的記錄器樹。

我可以想象,由於文件附加器在原始應用程序中運行,因此我可以通過在主應用程序中以編程方式創建控制台附加器來解決我的問題。 但是,我不知道這是對的還是對立。

記錄器樹的編程配置應使用LogManager config選項完成

屬性“ config”。 此屬性旨在允許運行任意配置代碼。 該屬性定義了由空格或逗號分隔的類名稱列表。 將為每個命名的類創建一個新實例。 每個類的默認構造函數可以執行任意代碼以更新日志記錄配置,例如設置記錄器級別,添加處理程序,添加過濾器等。

  1. 創建一個獨立的命名類,該類將處理程序安裝在構造函數中。
  2. java.util.logging.config.class系統參數設置為您的類的名稱。
  3. 否則,如果您有logging.properties,則將config設置為類名。

所以,我的問題是:關於使java.util.logging和Log4j 2互操作,我需要了解一些常規知識嗎? 如果原始應用程序未正確編碼或未按照最佳實踐進行編碼,則可以對其進行更改。

java.util.logging.LogManager只能在系統類加載器上看到類 在那種情況下,需要代碼中的日志配置才能訪問正確的類加載器。

刪除所有JUL配置並橋接到Log4j2可能會更容易。 然后,您可以利用該框架所需的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM