2016-03-21 10 views
0

私はこの問題を解決するために多くの努力を続けてきました。 Log4j2のドキュメントでは、カスタム構成パスを定義するためにlog4j.configurationFileシステムプロパティを定義するよう求められています。私は私が構成で定義されたファイルへのテストケースとログを実行mvn installを実行すると、これは完璧に動作します私のpom.xmlLog4j2 configurationFileシステムのプロパティは、Mavenテスト中にのみ動作します。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludes> 
      <exclude>**/RequestMetricsTest.java</exclude> 
      <exclude>**/SessionMetricsTest.java</exclude> 
     </excludes> 
     <systemProperties> 
      <property> 
       <name>log4j.configurationFile</name> 
       <value>src/main/resources/metrics-log4j2.xml</value> 
      </property> 
     </systemProperties> 
    </configuration> 
</plugin> 

でこのプロパティを定義しました。しかし、私はこのビルドされたjarファイルをweb-appで置き換えると、何もログに記録されず、log4j2の設定xmlが見つからないというエラーが返されます。

質問:このシステムプロパティを定義するために他に必要なものはありますか?

注:私のプロジェクトにはweb.xmlはありません。

+0

ここで、上記のsystemPropertiesセクションを設定していますか?確実なMavenプラグインで? POMファイルをもっと共有していただけますか? –

+0

はい、それはsurefire mavenプラグインで定義されています。質問を更新してください。見てください。 –

+0

は正常ですが、テストフェーズにのみ適用されます。 metrics-log4j2.xmlではなくlog4j2.xmlと呼ばれなければならない理由はありますか? –

答えて

1

あなたが唯一の構成は、あなたの最終的なアプリケーションのために見えなかった理由です、実行されたテストに適用されるのMavenプラグインシュアファイアの一部として、システムのプロパティを指定しています。

ただし、コンフィギュレーションファイルは/src/main/resourcesの下に配置されているため、プロジェクトアーティファクトとともに出荷(パッケージ化)されます。しかし、標準(デフォルト)の名前を持っていないので、log4j2にそれを指す別のパラメータが必要です。

デフォルトでofficial F.A.Q. page

から、Log4jには、クラスパスに(ないlog4j.xmllog4j2.xmlという名前の設定ファイルを探します。あなたのWebアプリケーションにそれを適用したい場合は、
-Dlog4j.configurationFile=path/to/log4j2.xml

official documentationによると、あなたはあなたに以下を追加する必要があります:
OUも、このシステムプロパティで設定ファイルのフルパスを指定することができますweb.xmlファイル

<context-param> 
    <param-name>log4jConfiguration</param-name> 
    <param-value>/metrics-log4j2.xml</param-value> 
</context-param> 

しかし、あなたは(どのように来る?)あなたは、単に(metrics-log4j2.xmlからへのデフォルト名に名前を変更でき、あなたのプロジェクトでweb.xmlファイルを持っていない言及したので、)、自動的に認識されるべきです。

+0

詳細な説明をありがとう。実際に、私が作業しているプロジェクトの一部はweb.xmlを必要としません。もちろん、プロジェクト全体のweb.xmlがあります。あなたの説明で、私はweb.xmlに変更を加える必要があることを確認します。再度、感謝します! –

1

Surefireプラグインは、ビルドライフサイクルのテスト段階でのみ使用されます。ここで設定されたシステムプロパティは、アプリケーションが実行されているときではなく、Mavenビルド時にのみ注入されます。

JARをコンパイルして実行すると、ホストのシステムプロパティまたはパラメータとして渡すシステムプロパティが使用されます。あなたがlog4jのプロパティを設定することができます

java -jar myjar.jar 

サイドノートで
java -Dlog4j.configurationFile=src/main/resources/metrics-log4j2.xml -jar myjar.jar 

systemPropertiesは廃止され

はあなたのようなあなたのJARを実行していると言います。

代わりにsystemPropertyVariablesでお試しください。ここで利用可能

ドキュメント: https://maven.apache.org/components/surefire/maven-surefire-plugin/examples/system-properties.html

+0

さて、私はその変更を行い、試してみます。しかし、いくつかの質問は、なぜそれが非難されている場合、mavenテストのために働くのですか?そして、これを 'pom.xml'に追加すれば、ログが有効になります。これらのnoobの質問には申し訳ありません。私はこれを初めてやっています。 –

+0

とにかく動作しません。テストフェーズにのみ適用されます。 –

+0

必要な情報で回答が更新されました。申し訳ありませんが、あまりにも早く保存しました! – timothyclifford

関連する問題