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?
我有一個具體的要求,如果我想加載兩個屬性文件我該怎麼achive呢?我的意思是來自a.jar和b.jar的log4j.properties文件應該被加載...有什麼辦法嗎? – Gourabp
爲什麼你需要加載它們兩個?將配置文件外部化到文件的目標是能夠以您想要的方式配置日誌記錄。所以jar文件甚至不應該附帶捆綁的log4j.xml文件。相反,他們應該記錄他們使用的記錄器(按照慣例,記錄器名稱是類名稱),然後應用程序組裝者使用這兩個jar文件創建它自己的配置文件,其中包含所有在應用。 –
我想加載他們兩個,因爲我正在寫客戶端API,我想記錄客戶端API特定日誌到一個單獨的文件。該應用程序可以擁有自己的log4j配置,但我不希望客戶端更改任何內容。我只會給他們api jar的API特定appender和記錄器將被定義。另外請注意,我不想以編程方式實現它,我想通過配置來實現它。 – Gourabp