JVM引数によるlog4j設定?


133

log4jを適切に実行するために、JVMに引数として設定/渡す必要がある変数は何ですか?そして、適切に言うと、文句を言わず、コンソールに出力しません。典型的な例を見ることができますか?

注:アプリケーションでlog4j.propertiesファイルを作成しないようにする必要があります。


2
読者は注意してください:log4j2ではなく、log4jについて質問していることに注意してください。
neves

回答:


161

log4j構成ファイルはありますか?ちょうどそれを使用してそれを参照してください

-Dlog4j.configuration={path to file}

{ファイルへのパス}の前に file:

編集: log4j2で作業している場合は、使用する必要があります

-Dlog4j.configurationFile={path to file}

回答https://stackoverflow.com/a/34001970/552525から取得


ブライアン-まさに私が探していたものではありませんが、ファイルをアプリケーションに移動することと、JVM argsを介してプロパティを設定することの間の適切な妥協点だと思います。
jconlin 2009

アプリケーションが複雑になると(複雑になる場合)、構成するほどファイルが管理しやすくなると思います。しかし、私はここであなたのユースケースについて推測していることを告白します。
ブライアンアグニュー

25
{path to file}file:これを機能させるには、前に付加する必要があります。
またはMapper

2
@ORMapper-私は適切に修正しました
Brian Agnew 14

6
プロパティ名としてLog4j 2を使用し、構文を変更した場合は注意してくださいこの回答を参照してください。
ホセ・Andias

161

解決策は、次のJVM引数を使用することです。

-Dlog4j.configuration={path to file}

ファイルがクラスパスにないWEB-INF/classes場合(Tomcatの場合)、ディスク上のどこかにある場合はfile:、次のように使用します。

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

詳細と例はこちら:http : //logging.apache.org/log4j/1.2/manual.html


2
Logbackの場合:-Dlogback.configurationFile=C:\logback-test.xml
2013年

2
1ファイルに言及するために(ティムが言ったことを繰り返し強調これは私のlog4jと狂気を何度も牽引してきた。。
javadba

13
log4j構成のデバッグに非常に便利な別のJVM引数:-Dlog4j.debug
KC

2
この方法で相対パスを使用することは可能ですか?
AaA 2015

33

これは(おそらくlog4j2で)次のように変更されたようです。

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

参照:https : //logging.apache.org/log4j/2.x/manual/configuration.html


これは私に次の例外を与えます。C:\ Development \ Eclipses \ EclipseMars \ file:C:\ Users \ ABC \ log4j2.xmlパスを絶対パスにする方法
Cyber​​monk

DockerコンテナーのJAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"場合、Docker ImageがJAVA_PARAMSをenv varsでオーバーライドすることをサポートし、ファイルがJAR内にある場合に使用しました。
マルチェロ

21

これはすでに回答済みですが、あなたが言ったので、これは正確にあなたが探しているものではないので、次の代替案を指摘したいと思います。

プロパティやxmlファイルの代わりに構成クラスを使用することもできます。

-Dlog4j.configuratorClass=com.foo.BarConfigurator

詳細については、http://logging.apache.org/log4j/1.2/manual.htmlを参照してください。


1
これは、誰かが構成ファイルの作成を避けたい場合の正しい解決策です。独自のカスタムConfiguratorクラス内で、BasicConfigurator()を呼び出すか、必要に応じて独自のロガーとアペンダーを作成できます。しかし、私は設定ファイルをはるかに好みます!
skiphoppy 2012

11

一般に、log4j.propertiesファイルがクラスパス上にある限り、Log4jはJVMの起動時に自動的に取得する必要があります。


1
これは当てはまります。-Dlog4j.configurationは、ファイルがクラスパスになかった場合、またはクラスパスで最初に見つからなかったファイルを使用したい場合にのみ必要です
javadba

8

2015年以降、パーティーに遅れて、Log4J 1.xはEOLに達しました

Log4J 2.x以降のJVMオプション-Dlog4j.configurationFile=<filename>


PSは、<filename>クラスパスからの相対ファイルとすることができずにfile:他の回答で提案されているように。


2
他の回答は無効になるため、重要な回答。
Yossale 2017

1

相対パスも問題ありません:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

または

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Gradleを使用している場合。'aplication'プラグインを適用して、次のコマンドを使用できます

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.