2009-10-06 13 views
11

私はlog4jプロパティーファイルがlog4.propertiesと呼ばれていない場合に、commons-logging経由でlog4jを使用しようとしています。 エラーが発生しました: log4j:WARN logger(LogMePlease)のアペンダーが見つかりませんでした。 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.propertiesするlog4j-test.propertiesファイルの名前を変更した場合、私は

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

を取得する - そして、すべてが動作します。 それでは、log4j.propertiesファイルに任意の名前を使用するようにコモンズロギングを設定するにはどうすればいいですか?

答えて

10

ファイルcommons-logging.propertiesはコモンズロギングからのみ読み込まれ、log4jはシステムプロパティーでlog4j.configurationを検索します。

コマンドラインでJVMオプションとして-Dlog4j.configuration=log4j-test.propertiesを指定するか、いずれかのロギングメソッドを最初に呼び出す前にSystem.setProperty()を呼び出す必要があります(これは通常かなり難しい)。

注:可能であれば、XML設定log4j.xmlを使用してください。 log4jを設定する方がはるかにシンプルで強力です。

1

あなたはそのようなシステムプロパティの値の前にプロトコルを追加する必要があります。それはクラスパスになりますプロトコルがなければ//log4j-test.properties

:-Dlog4j.configuration =ファイル。

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 

logのインスタンスの前にlog4j.propertiesを設定します。

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