2009-10-06 67 views
11

我想通過commons-logging使用log4j,如果log4j屬性文件沒有被稱爲log4.properties,會出現問題。 我得到以下錯誤: log4j:WARN記錄器(LogMePlease)找不到appender。 log4j:WARN請正確初始化log4j系統。commons-logging和log4j屬性文件

我的代碼是非常簡單的:

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class LogMePlease 
{ 
static Log l = LogFactory.getLog(LogMePlease.class); 

public static void main(String [] args) 
{ 
    l.warn("Hello World!"); 
} 
} 

在類路徑中,我有: commons-logging.properties文件,它包含以下條目

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 
log4j.configuration=log4j-test.properties 

log4j- test.properties文件

當我運行這段代碼我得到

log4j:WARN No appenders could be found for logger (LogMePlease). 
log4j:WARN Please initialize the log4j system properly. 

如果我重新命名log4j-test.properties文件是log4j.properties - 那麼一切正常。 所以,問題是我如何設置公用日誌記錄來使用log4j.properties文件的任意名稱。

回答

10

文件commons-logging.properties只能從公用日誌中讀取,而log4j將在系統屬性中查找log4j.configuration

因此,您必須在命令行上使用-Dlog4j.configuration=log4j-test.properties作爲JVM選項指定它們,或者在首次調用任何日誌記錄方法(通常很難實現)之前必須調用System.setProperty()

注意:如果可以,請使用XML config log4j.xml;它配置log4j更加簡單和強大。

1

您需要的協議添加到系統屬性值的面前就像這樣:-Dlog4j.configuration =文件://log4j-test.properties

沒有協議它將在類路徑中。

0

jul - commons-logging,它喜歡你的情況。

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl 
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger 
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 

設置log4j.properties之前的Log實例。

System.setProperty("log4j.configuration", "log4j.properties");