web-dev-qa-db-ja.com

Log4J2プロパティの置換-デフォルト

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コンソールでプロパティを確認できます。サーバーを再起動しましたが、完了できません。

41
Leos Literak

デフォルトのプロパティマップ

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

62
Remko Popma

同じ${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>
16
GoGoris