web-dev-qa-db-ja.com

SpringJUnit4ClassRunnerのlog4j.propertiesを構成する方法

これは、JUnitテスト中に突然発生し続けます。すべてが機能していたため、新しいテストをいくつか作成しましたが、このエラーが発生しました。元に戻しても消えません。何故ですか?

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
64
user219882

作成した新しいテスト(直接的または間接的に)はLog4jを使用してログを記録するクラスを使用します。

このロギングが正しく機能するには、Log4Jを構成する必要があります。

log4j.properties(またはlog4j.xml)ファイルをテストクラスパスのルートに配置します。

次のような基本的な構成が必要です。

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.Apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.Apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# An alternative logging format:
# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n

アペンダーはデフォルトでコンソールに出力しますが、次のようにターゲットを明示的に設定することもできます。

log4j.appender.A1.Target=System.out

これにより、すべての出力がNice形式でコンソールにリダイレクトされます。詳細は Log4Jマニュアル にあります。

Log4Jロギングは適切に構成され、この警告は消えます。

72
Axel Fontaine

ファイルに煩わされたくない場合は、コードで次のようなことができます。

static
{
    Logger rootLogger = Logger.getRootLogger();
    rootLogger.setLevel(Level.INFO);
    rootLogger.addAppender(new ConsoleAppender(
               new PatternLayout("%-6r [%p] %c - %m%n")));
}
48
tster

クラスパスのルートに少なくとも1つのアペンダーを含むlog4j.properties(log4j.xml)ファイルを追加します。

ファイル(log4j.properties)の内容は、次のように単純にすることができます。

log4j.rootLogger=WARN,A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.Apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.Apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n

これにより、デフォルトのログレベルがWARNのlog4jロギングが有効になり、Javaコンソールを使用してメッセージを記録します。

8
Arun P Johny

Log4j.propertiesが適切に構成されています。それは問題ではありません。しばらくして、問題がEclipseにあることがわかりましたIDE「キャッシュ」に古いビルドがあり、新しいビルドを作成しませんでした(Mavenの依存関係の問題)。プロジェクトをビルドしなければなりませんでした。手動で動作するようになりました。

4
user219882

EclipseでMavenを使用していましたが、ルートフォルダーにプロパティファイルのコピーを追加したくありませんでした。 Eclipseで次のことができます。

  1. 実行ダイアログを開く(再生ボタンの横にある小さな矢印をクリックして、実行構成に移動します)
  2. 「クラスパス」タブに移動します
  3. 「ユーザーエントリ」を選択し、右側の「詳細設定」ボタンをクリックします。
  4. [外部フォルダの追加]ラジオボタンを選択します。
  5. リソースフォルダーを選択します
3
Manu Mukerji

重複ファイル(testおよびmainのlog4j.properties)がなく、非常に多くのテストクラスがあるため、それぞれがSpringJUnit4ClassRunnerクラスで実行されるため、カスタマイズする必要があります。これは私が使用するものです:

import Java.io.FileNotFoundException;

import org.junit.runners.model.InitializationError;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Log4jConfigurer;

public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {

    static {
        String log4jLocation = "classpath:log4j-oops.properties";
        try {
            Log4jConfigurer.initLogging(log4jLocation);
        } catch (FileNotFoundException ex) {
            System.err.println("Cannot Initialize log4j at location: " + log4jLocation);
        }
    }

    public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
        super(clazz);
    }
}

使用するときは、SpringJUnit4ClassRunnerをMySpringJUnit4ClassRunnerに置き換えます

@RunWith(MySpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:conf/applicationContext.xml") 
public class TestOrderController {
    private Logger LOG = LoggerFactory.getLogger(this.getClass());

    private MockMvc mockMvc;
...
}
2
Tiina

私はこれが古いことを知っていますが、私も問題を抱えていました。 MavenとEclipseを使用するSpring 3の場合、Unit Testが正しくログを記録するには、src4/test/resourcesにlog4j.xmlを配置する必要がありました。テストのルートに配置してもうまくいきませんでした。これが他の人の助けになることを願っています。

2
Hodglem