2013-05-24 6 views
5

この質問は何度も聞かれたようです。しかし、私が試したすべてのソリューション(ほとんどの場合、log4j.propertiesファイルが正しい場所にあり、正しく入力されていることを確認してください)が私の場合は機能しません。log4j:WARNロガーのアペンダーが見つかりませんでした - slf4j-log4j12を使用しています

私はmavenプロジェクトを持っています。私は私のテストのためにlog4jを使用したいと思います。テストクラスは、ロガーが使用されるsrc/main/javaで定義されたヘルパーメソッドを使用します。私は

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

を輸入していると私は私がSRC /メインの両方に含めましたロガー

private static final String TAG = Helper.class.getSimpleName(); 
private static final Logger logger = LoggerFactory.getLogger(TAG); 

をインスタンス化している(SRC /メイン/ javaの/に)私のヘルパークラスで

/資源とのsrc /テスト/リソース以下log4j.propertiesは、私はSLF4Jの依存関係を含めました私のPOMで

### set log levels - for more verbose logging change 'info' to 'debug' ### 
### Also add logfile to the root, if need stdout then add stdout appender here### 
log4j.rootLogger=debug, stdout 

### direct log messages to stdout ### 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{dd-mm HH:mm:ss,SSS} %p/%c{1}:%L - %m%n 

を提出します私のヘルパークラス内のコードで

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
</dependency> 

私は、このようにロガーを使用

logger.debug("logger test..."); 

何のメッセージがコンソールに印刷されていないと私は、次の警告メッセージ

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

何を得るされています私は行方不明ですか?

更新

問題は、log4jの-のtest.xmlにlog4j.configurationプロパティを設定し、プロジェクトのオプションに関連していました。次のプラグインをプロジェクトmaven pomに追加しました。これで問題は解決しました。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.14.1</version> 
    <configuration> 
     <systemPropertyVariables> 
     <log4j.configuration>log4j.properties</log4j.configuration> 
     </systemPropertyVariables> 
    </configuration> 
    </plugin> 
+4

追加 '-Dlog4j.debug' JVM引数にlog4jがピックアップしている正確な構成ファイルを確認する –

答えて

5

投稿した商品からわかりました。だから問題を調査しましょう。次

  1. クリーンアップに生成されたコード
    MVNクリーン
    は、私は単純なプロジェクト(JUnitテストは、ヘルパーのメソッドを呼び出すために:あなたのロガーステートメントを呼び出すメソッドを持っている、AppTestはわずか2クラスのヘルパーを)やりましたファイルは
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main/resources/log4j.properties
    存在./src/test/java/sub/optimal/ mavenexample/AppTest.java
    ./src/test /resources/log4j.properties

  2. はMVN
    次のファイルをコンパイルしたコードに
    をコンパイル
    ./src/main/java/sub/optimal/mavenexample/Helper.java
    ./src/main存在/resources/log4j.properties
    ./src/test/java/sub/optimal/mavenexample/AppTest.java
    ./src/test/resources/log4j。プロパティ
    ./target/classes/log4j.properties
    ./target/classes/sub/optimal/mavenexample/Helper.class

    プロパティファイルは、あなたが見つける必要があるターゲットディレクトリにコピーされていない場合理由

  3. いくつかの出発点は、

    MVN -debugコンパイル
    MVN -Dlog4j.debugテスト
+0

こんにちはSubOptimal、 log4j.propertiesは、target/classesディレクトリに正しくコピーされています。 しかし、私がmvn -Dlog4j.debugテストコマンドを実行すると、次の出力が得られます。 log4j:コンテキストクラスローダー[email protected]を使用して[log4j-test.xml]を検索しようとしています。 log4j:[email protected]クラスローダーを使用して[log4j-test.xml]を検索しようとしています。 log4j:ClassLoader.getSystemResource()を使用して[log4j-test.xml]を検索しようとしています。 log4j:リソース[log4j-test.xml]を見つけることができませんでした。 .propertiesファイルが検索されないようです。私はなぜ理解できないのですか – Piero

+1

こんにちはPiero、デフォルトのlog4j構成ファイル名ではないlog4j-test.xmlを探しているので、somwhereを設定する必要があります。おそらく、あなたの設定に '-Dlog4j.configuration = log4j-test.xml'オプションがあるか、システムプロパティがプログラムで設定されています。それを見てみましょう。 – SubOptimal

+0

こんにちはSubOptimal。はい、私はまだ、なぜこの設定変数が設定されているのかわかりません。しかし、私はそれを修正する方法を見つけた。私の更新を参照してください。 log4jデバッグ出力を表示する方法のヒントをありがとう。 – Piero

0

てみTHESの出力をチェックEコマンド...それは私のために働い

$解除FLUME_HOME

と次に試してみてください.....

....

関連する問題