2012-06-05 87 views
13

Log4j如何在其類路徑中管理多個log4j.properties?哪個log4j.properties文件優先?讓我描述一下確切的場景。類路徑中的多個Log4j.properties文件

我有不同的團隊開發的多個maven模塊,他們每個人都有自己的log4j.properties文件。所有這些log4j.properties文件都配有RootLogger以及ConsoleAppender和FileAppenders。

現在,當Log4j加載哪個log4j.properties文件將用於配置RootLogger設置?另外,Log4j將如何創建Logger層次結構?其他第三方jar中的log4j.properties文件將如何影響日誌記錄過程?

回答

9

類路徑中的第一個文件將被加載。因此,如果A.jar和B.jar都包含文件,並且A.jar在類路徑中的B.jar之前,則會加載A.jar的文件。這就是類加載器的工作原理。

+0

我有一個具體的要求,如果我想加載兩個屬性文件我該怎麼achive呢?我的意思是來自a.jar和b.jar的log4j.properties文件應該被加載...有什麼辦法嗎? – Gourabp

+0

爲什麼你需要加載它們兩個?將配置文件外部化到文件的目標是能夠以您想要的方式配置日誌記錄。所以jar文件甚至不應該附帶捆綁的log4j.xml文件。相反,他們應該記錄他們使用的記錄器(按照慣例,記錄器名稱是類名稱),然後應用程序組裝者使用這兩個jar文件創建它自己的配置文件,其中包含所有在應用。 –

+0

我想加載他們兩個,因爲我正在寫客戶端API,我想記錄客戶端API特定日誌到一個單獨的文件。該應用程序可以擁有自己的log4j配置,但我不希望客戶端更改任何內容。我只會給他們api jar的API特定appender和記錄器將被定義。另外請注意,我不想以編程方式實現它,我想通過配置來實現它。 – Gourabp

2

log4j的版本1.x中:

正如其他人所指出的是,log4j會在類路徑中的第一個配置文件。請參閱:http://logging.apache.org/log4j/1.2/manual.html

但是,當在類路徑中同時存在'log4j.xml'和'log4j.properties'文件時,從實驗看來,log4j優先於'log4j.xml'而非'log4j.properties'。

即首先,log4j似乎在類路徑中查找第一個'log4j.xml'文件。如果沒有,那麼log4j似乎會在類路徑中查找第一個「log4j.properties」文件。

複製和粘貼從下面的代碼可在確定正在使用什麼配置文件幫助:

import org.apache.log4j.Logger; 

public class TestLog4j 
{ 

    static 
    { 
    System.out.println("Classpath: [" + System.getProperty("java.class.path") + "]"); 
    System.out.println("Found logging configuration files:"); 
    System.out.println(" log4j.xml: " + Logger.getRootLogger().getClass().getResource("/log4j.xml")); 
    System.out.println(" log4j.properties: " + Logger.getRootLogger().getClass().getResource("/log4j.properties")); 
    } 

    public static void main(String[] args) 
    { 
    System.out.println("main():"); 
    } 
} 

編輯:

log4j的版本2.x的:

的默認配置文件的搜索順序記錄在此處:http://logging.apache.org/log4j/2.x/manual/configuration.html

即對於log4j版本2.x,如果沒有找到更高優先級配置文件(例如, log4j2-test。[屬性| yaml | json | xml]),那麼如果在類路徑中找到文件,則使用文件log4j2.properties。請注意,log4j2.xml的優先級最低,只有在未找到log4j2'properties','yaml'或'json'配置文件時纔會使用。

注意:爲了幫助調試log4j配置問題,請設置'log4j.debug'屬性,例如搭配:

java -Dlog4j.debug ... 

參見:How to initialize log4j properly?

+0

看起來像是另一回合?請參閱[鏈接](https://logging.apache.org/log4j/2.x/manual/configuration.html) –

+0

編輯以反應log4j ver 2.x,添加鏈接到文檔(謝謝@chandra_cst)和其他調試暗示。 –

相關問題