2011-12-20 6 views
1

プロパティファイルを読み込んでコンソールに出力を記録する簡単なプログラムを作ろうとしていますが、それを行うことはできません。slf4jを使用して.propertiesファイルを読むにはどうすればよいですか?

これが私のクラスである:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public final class Slf4jSample { 

    public static void main(final String[] args) { 
     final Logger logger = LoggerFactory.getLogger(Slf4jSample.class); 

     logger.info("Hello World!"); 
    } 

    private Slf4jSample() { 
    } 
} 

そして、これは私のプロパティファイルです:

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 

log4j.logger.Slf4jSample=INFO, A1 

私はこれを実行すると、それはこの例外を与える:

log4j:WARN No appenders could be found for logger (com.slf4j.Slf4jSample). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
+0

** complete ** stacktraceを含めてください。 –

+0

クラスパスに必要なjarファイルはありますか? – hellectronic

+1

これはhttp://stackoverflow.com/questions/8474954/read-properties-file-using-slf4jからのフォローアップです – oers

答えて

4

「log4j:WARN No appenders was found ...」というメッセージは、SLF4Jがlog4jに正しくバインドされているが、log4jがlog4j.propertiesファイルをロードできなかったことを示しています。 SLF4Jはここで問題ではありません。クラスパスにlog4j.propertiesを配置するだけです。

3

は、あなたがしていることを考慮すると、基になるロギングライブラリとしてのlog4jでslf4jを使用し、クラスにslf4j-log4j.jarとlog4j.jarの両方を持っているathの場合は、log4j.properitesファイルの場所を指定する必要があります。

あなたのクラスパスにlog4j.propertiesを入れるためにCekiが言いました。自動的にそれを拾うべきです。これがうまくいかない場合、またはlog4j.propertiesがクラスパスの外に存在する必要がある場合は、コード実行時に-Dlog4j.configuration=log4j.propertiesをJVM引数に追加できます。この変数の値はフルパスでも、実行元のカレントディレクトリからの相対パスでもかまいません。私のIDEでJUnitテストをexectuingとき

例えば、私は一般的に、それは私のJavaプロジェクト内ではありません、私のプロパティファイル(すなわちないクラスパス上)

をピックアップ確保するために、私の実行プロファイルにJVM引数としてこれを追加します
-Dlog4j.configuration=file:/C:/java/workspace/logs/log4j.properties 
関連する問題