JUnitテストクラスのlog4jはどこで構成しますか?


85

私が書いた最後のJUnitテストケースを見て、クラスコンストラクター内でlog4jのBasicConfigurator.configure()メソッドを呼び出しました。これは、Eclipseの「runasJUnittestcase」コマンドからその単一のクラスを実行する場合に問題なく機能しました。しかし、私はそれが間違っていることに気づきました。メインのテストスイートがこれらすべてのクラスを1つのプロセスから実行していると確信しているため、log4j構成はどこかで行われるはずです。

ただし、テストケースを単独で実行する必要がある場合もあります。その場合は、log4jを構成する必要があります。テストケースがスタンドアロンで実行されるときに実行されるが、テストケースがより大きなスイートの一部として実行されるときに実行されないように、構成呼び出しをどこに配置する必要がありますか?


私は...ない2、ここでのlog4j 1.1を仮定するつもりだ
rogerdpack

回答:


51

LogManagerlog4jの設定がで使用するクラス判定する静的ブロッククラスがロードされるときに実行されます。エンドユーザー向けの3つのオプションがあります。

  1. log4j.defaultInitOverridefalseに指定すると、log4jはまったく構成されません。
  2. 構成ファイルへのパスを自分で手動で指定し、クラスパス検索をオーバーライドします。次の引数を使用して、構成ファイルの場所を直接指定できますjava

    -Dlog4j.configuration=<path to properties file>

    テストランナー構成で。

  3. テスト中にlog4jがクラスパスをスキャンしてlog4j構成ファイルを探すことを許可します。(デフォルト)

オンラインドキュメントも参照してください。


それが「log4j構成ファイル」であることをどうやって知るのでしょうか?ファイル名は何ですか?(log4j.xml?)
チャド

1
@チャド:あなたの質問に答えるために私の答えを編集しました。これがどのように実装されているかを正確に確認するには、静的ブロックへのリンクを参照してください。
Paul Morie

log4j2を使用しており、ファイルを示すために次の設定を使用する必要がありました-Dlog4j.configurationFile=log4j2.xml。また、読み込み/起動をデバッグしようとしている場合は、次の設定が役立ちます-Dlog4j2.debug=true
ケント

この答えをもう少し具体的にする方法はありますか?
markthegrea 2018

61

私は通常、log4j.xmlファイルをsrc / test / resourcesに配置し、log4jにそれ自体を検出させます。コードは必要ありません。デフォルトのlog4j初期化で取得されます。(私は通常、自分のロガーを「DEBUG」に設定したいと思います)


6
標準的な建物のテストでは、Log4jを警告またはエラーに設定します。テストが成功した場合(ネガティブテストも)、ユーザーの注意を引くロギングはありません。
keiki 2012年

2
はい、log4j1.xの場合はそうです。log4j2の場合、log4j2-test.propertiesファイルのようなより「エキゾチックな」ファイルを使用できるようです... logging.apache.org/log4j/2.x/manual/configuration.html :)
rogerdpack 2018年


5

log4j.xmlでシステムプロパティを使用します。

...
<param name="File" value="${catalina.home}/logs/root.log"/>
...

そしてテストを開始します:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <systemProperties>
            <property>
                <name>catalina.home</name>
                <value>${project.build.directory}</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.