2017-10-04 70 views
1

私のJavaプログラムでは、いくつかのログファイルを使いたいと思っています。log4J2変数/参照値を保存して使用する

したがって、log4jのドキュメントによると、私は参照値はそれを行うために使用すると仮定します。

Lookupsページでは、設定ファイルの作成方法について説明しています。しかし、設定ファイルが値を取得するように値を格納する方法に関する情報はほとんどありません。

私はlogfilenameを動的に埋めたいと思っています。 envrimonment作品と

テスト:

<File name="MyFile" fileName="${env:USERERNAME}" immediateFlush="false" append="false"> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
</File> 

私はSystem.getProperty("USER")は、Javaの検索${java:USER}にマッチすることを前提としていますが、それは動作しません。

私が使用して両方の変数をテストした:

System.out.println("USER: " + System.getProperty("USER")); 
System.out.println("USERNAME: " + System.getenv("USERNAME")); 

  • コンテキスト地図検索
  • のJavaルック違いがあり

の変数を埋めるために、どのように?

+0

は、タイプミスではありませんか? (あなたは '$ {env:USERERNAME}'を書きました) –

+0

いいえ - –

+0

を明確にするために質問を編集しました。 ] ' –

答えて

1

log4j2にはさまざまな検索方法があります。私は彼らにいくつかの詳細を追加してみましょう -

コンテキスト地図検索 - コンテキストマップを使用して値を置くための、コードの下に使用 -

org.apache.logging.log4j.ThreadContext.put("logFileName", "app.log"); 

変数は、${ctx:logFileName}または%X{logFileName}を使用して設定ファイルにアクセスすることができます。

コンテキストマップのルックアップは、一般的に、各ユーザーリクエストの値、つまりそれぞれthreadの値を求めるWebアプリケーションで使用されます。

環境のルックアップ -環境ルックアップがUSERNAMEPLATFORMなどのシステム環境変数を検索するために使用されます。

System.out.println(System.getenv()); 

や特定​​の環境変数を - - あなたは、以下の使用して、Javaのすべての環境変数を印刷することができ

System.out.println(System.getenv("NUMBER_OF_PROCESSORS")); 

しかし、Javaプログラムから、あなたは環境変数を設定することはできません。

コードで言及したとおり、環境変数には${env:NUMBER_OF_PROCESSORS}構文を使用してアクセスできます。

Javaの検索 - Javaの検索がjava versionのようなJava環境の情報であり、hardwareなどの変数は固定されており、Javaプログラムで設定することはできません。

このような変数は、${java:vm}の構文を使用してアクセスできます。ここで、vmはJava環境関連の変数名です。

システムのプロパティ検索 -

System.setProperty("logFileName", "app.log"); 
System.getProperty("logFileName"); 

変数${sys:logFileName}構文を使用してlog4j2設定ファイルにアクセスすることができます -コードの下に使用してこのようなプロパティを取得し、設定するのは簡単です。

これらのシステムプロパティの良い点は、-DlogFileName=app3.logのように、これらのプロパティをVM Argumentsとしてプログラムに渡すことができることです。

日付検索、主に使用されている地図検索などのような他の検索メカニズムがあります。アプリケーションで動的にファイル名を設定したいとあなたは一度だけファイル名を設定したい場合は、私はあなたSystem propertyに示唆しているので、残りの詳細はhere


を確認することができます。ただし、初期化する前にSystem Propertyを設定することを確認してください。log4j

+0

非常に良いシンプルで詳細な説明 - muchas gracias –

関連する問題