3

さまざまな環境 (dev、ci、prod など) で動作する単一の WAR ファイルが必要であり、Spring 環境は主にユース ケースに対応しています。環境ごとの log4j は優れた項目の 1 つです。他の回答で示唆されているように、環境ごとに log4j 構成を使用できますが、各環境のファイルには多くの繰り返しがあり、異なるのは SMTPAppender の toAddress などのマイナー プロパティだけです。テンプレートのようなlog4j構成ファイルを使用して、各環境で異なる部分を実行時に置き換える簡単な方法はありますか? コンパイル時の選択が発生するため、Maven はここでは機能しません。

私が考えることができる 1 つの解決策は、Log4jConfigurer を拡張していくつかの環境変数を読み取ることです。テンプレートのキーと値のペアをマップし、テンプレート ファイル内のテンプレート変数を実際の値に置き換えてから、DOMConfigurator に渡します。もっと簡単な方法があるかどうか、またはベストプラクティスの観点から間違ったツリーを吠えているかどうかを確認したかっただけです。

前もって感謝します!

4

1 に答える 1

1

私はあなたのケースを完全には理解していませんが、プロパティのプレースホルダーが役立つはずです: http://jvleminc.blogspot.ru/2008/05/avoid-absolute-path-in-log4j-properties.html

  1. たとえば、アペンダー ファイルを指定する場合は、プロパティ ファイルでプレースホルダーを使用します。

    log4j.appender.file.File=${log4j.logFile}
    
  2. このプレースホルダー値を VM パラメーターとして (Web) アプリケーションに渡します。log4j エンジンはプレースホルダーを解決しようとし、最終的にシステム パラメーターにフォールバックします。したがって、この例では次のようになります。

    -Dlog4j.logFile=C:/logs/MyApplication.log
    

ところで、通常、人々はロギング構成を外部化すると思います。つまり、外部の log4j.properties ファイルを使用します。リリース エンジニアは、環境ごとにこれらの構成を管理します。また、ファイルを変更してアプリを再起動したり、場合によっては再起動しなくても一部の値を変更したりできます。

于 2015-01-08T16:56:38.150 に答える