LOG4Jのプロパティ置換にデフォルト値を提供する方法はあるのだろうか?
ファイルパスをJavaシステムプロパティに渡し、 "$ {env:mySystemProperty}"で使用したいのですが、開発者がこのプロパティの設定を忘れた場合はどうすればよいですか? log4j2.xmlで定義された意味のあるデフォルト値。
この機能を実現する方法はありますか?
編集:
Env置換は私にとっては機能しません:
standalone.conf
-DoauthLoginLogPath=/path/oauth2.log
log44j2.xml
<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">
Wildflyコンソールでプロパティを確認できます。サーバーを再起動しましたが、完了できません。
デフォルトのプロパティマップ
http://logging.Apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution を見ると、設定ファイルでデフォルトのプロパティマップを指定できます。これは次の形式を取ります。
<Configuration status="debug">
<Properties>
<Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
</Properties>
...
<Appenders>
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}">
....
</Configuration
次に、システムプロパティ-DoauthLoginLogPath=/path/oauth2.log
を使用してアプリを起動すると、ファイルアペンダーfileName
値が最初にシステムプロパティで検索されますが、それが失敗した場合は、 log4j2.xml構成ファイルの上部にあるProperties
セクション。
インライン
2番目の方法は、デフォルト値をインラインで提供することです。
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
通常、すべてのLog4j2ルックアップは${type:key:-defaultValue}
というパターンに従います。
Env vs sys
ところで、env
プレフィックスは環境変数(Windowsの%PATH%など)用であり、sys
(Java system)とは関係ありません)プロパティも参照してください http://logging.Apache.org/log4j/2.x/manual/lookups.html
同じ${sys:propName:-default}
syntaxを使用できます。 「:-」に注意してください。「変数のデフォルト値の区切り文字」と呼ばれます。 「変数のデフォルト値の区切り文字」のdefault値は、bashおよびその他の* nixのように、:-
です。シェル。
StrSubstitutor クラスのLog4j 2ドキュメントでこれについて詳しく読むことができます。
同じ例を使用するには:
<Configuration status="debug">
...
<Appenders>
<Appender type="File" name="File"
fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
....
</Appenders>
</Configuration>