2016-07-12 26 views
0

私は、log4j2ログのどこにVM引数またはコマンドライン引数を使用するかを指定できます。Log4j2、コマンドライン引数でログ出力ディレクトリを制御する方法

これは、log4jプロパティファイルのパスを指定する方法を尋ねるすべての質問とは異なります。

は私はVMの引数に-Darbitrary.path="path/to/root/dir"を追加しlog4j2.propertiesでそれを参照することができ考え出し:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <File name="file" fileName="${arbitrary.path}/application.log"> 
      <PatternLayout 
       pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> 
     </File> 
    </Appenders> 
    <Loggers> 
     <Root level="info" additivity="false"> 
      <AppenderRef ref="file" /> 
     </Root> 
    </Loggers> 
</Configuration> 

ああ、動作しないことが表示されます。私が間違ってやっていることや、この機能を得る別の方法がありますか?

[EDIT]

@RCからの提案に基づき、私はまた、--log-dir "/tmp/logMonitor/logs"、コマンドライン引数を追加する試み、及び${main:--log-dir}への参照を変更しました。しかし、この変数は "-log-dir"として解決され、ログファイルを<project_root>/-log-dir/application.logに入れます。 [/ EDIT]

+0

お読みくださいでしたか:https://logging.apache.org/log4j/2.0/manual/lookups.html? –

+0

あなたが言及していると思うリンクの部分に基づいて、私は別の戦略を試みましたが、成功しませんでした。私はこれに関する情報を質問に追加しました。 – ds390s

+0

私は "環境"変数を使いますが、それはより簡単です –

答えて

1

Log4j 2は、設定でプロパティを置き換えることができます。プロパティ値は、システムプロパティ、環境、スレッドコンテキスト、リソースバンドルなど、さまざまな場所から取得できます。これらはLookupsと呼ばれ、プレフィックスが必要です。たとえば、システムプロパティの値を見つけるには${sys:arbitrary.path}を使用します。 Log4j 2マニュアルのLookupsセクションを参照してください。

代替は、設定にarbitrary.pathプロパティを自分で定義することです:

<Configuration status="warn"> 
    <Properties> 
     <Property name="arbitrary.path">/some/path/"</Property> 
    </Properties> 
    ... 
+0

私は今これをどうやって行うのかと思います。 Lookupsへのリンクありがとう。 – ds390s

0

だけ明確にするために、あなたはVMコマンドライン引数にパスを提供する場合、あなたはsysルックアップの接頭辞を使用します。これは、私がjvmrunargsまたはenvを使用しようとしていて、うまく動作しなかったときに私を混乱させていました。

関連する問題