2015-12-14 43 views
0

我已經成功地將我們的應用程序從log4j 1.x遷移到了log4j 2.x. 但有一個外部組件無法遷移。對log4j 1.x的調用應該保持原樣。試圖讓log4j1.x與log4j2.x一起工作

我有我們的應用程序的log4j2.xml和外部組件的舊log4j.properties。我在log4j2.xml中獲取appender的日誌,但沒有在log4j.properties中定義的日誌。我看過這篇文章 - Mixing log4j 1.x and log4j 2

並添加了所需的罐子。之前用log4j 1.x,我們曾經有兩個log4j.properties - 一個用於applciation,另一個用於使用PropertyConfigurator的外部組件。現在用log4j2.xml我不知道我們如何實現這一點。

Configuring log4j2 and log4j using a single log4j2 xml file 這篇文章說我們在類路徑中不能有log4j.properties。這是否意味着我需要將log4j.properties中定義的所有appender轉移到log4j2.xml?我可以爲外部組件提供單獨的log4j2.xml嗎?

回答

0

你不能有兩個log4j2.xml配置(好吧,單獨的web應用程序可以有單獨的配置,但通常每個進程都有一個配置)。

選項1:最簡單的做法是使用網橋log4j-1.2-api-2.x.jar並將log4j.properties配置合併到log4j2.xml中。然後所有記錄都由lo4j 2完成,它應該都可以工作。

如果你想以艱難的方式做事情,你可能會成功,但它可能需要一些擺弄。選項2:如果通過「將應用程序從log4j 1.x遷移到log4j 2.x」,您的意思是您的應用程序現在使用log4j 2 API,那麼您應該可以同時使用log4j 1.x和log4j 2與此同時。 (用於外部組件的log4j 1.x)

在這種情況下,不使用網橋log4j-1.2-api-2.x.jar。如果您使用橋接器,它會將調用路由到log4j 1.x API到log4j 2.通常這就是您想要的,但在這種情況下,您的外部組件想要使用log4j 1.x內部結構。 (這是真的如果不是,可以考慮選擇1?)

如果您的應用程序現在使用log4j的2 API,除了外部組件,然後把這些罐子和配置文件在類路徑:

  • log4j的-API 2.x.jar
  • log4j的核心 - 2.x.jar
  • 的log4j-1.2.x.jar
  • log4j2.xml - 爲您的應用
  • 的log4j log4j的2配置。屬性 - 外部的log4j 1.x配置l組件

但是,簡單地合併配置可能更容易維護。

+0

謝謝Remko的回覆。我想我們可能不得不選擇第二種選擇。 – flume

+0

出於興趣,這個外部組件是什麼? –

相關問題