私たちのチームは、シングルビルド状態に到達しようとしています。Testに送信されるビルドは、Staging->etc->Productionにプロモートされるビルドと同じです。現在、さまざまな環境のロギングを設定することは少し厄介な点です(現在、Mavenプロファイルを使用し、ビルド時にロガー構成をフィルター処理します)。
多くのWebアプリケーションがあり、ログをアプリで定義し、アプリがデプロイされている環境で構成できるようにしたいと思います。
Log4jを使用しますが、これを機能させる可能性のあるさまざまな実装を受け入れています。一部のアプリでは特定のパッケージで特定のロギングが必要になる場合があるため、アプリでロガーを定義できるようにしたいのですが、最終的には、環境でロギングパスとレベルを構成できるようにする必要があります。たとえば、QA環境では通常INFO
、パッケージにレベルロギングがありcom.foo.bar
ますが、スティッキーな問題が発生した場合は、それをに上げたい場合がありDEBUG
ます。技術的にビルドが変更されるため、アプリを再デプロイしたくありません。
最小限の突っ込みで、log4jがシステムプロパティを直接使用できることがわかりました。そのため、次のような設定が可能です。
<appender name="someAppender" class="com.whatevs.SomeAppender">
<param name="File" value="${logger.path}/some_app.log"/>
<!-- ... -->
</appender>
<logger name="com.foo.bar">
<level value="${logger.level.com.foo.bar}"></level>
</logger>
<root>
<priority value="${logger.priority}"/>
<appender-ref ref="someAppender"/>
</root>
私の懸念は、デプロイされるアプリの数と定義されるロガーの数が増えるにつれて、システムプロパティを維持するためのオーバーヘッドが煩雑になる可能性があることです。
-Dlogger.path=/var/log -Dlogger.priority=INFO -Dlogger.level.com.foo.bar=WARN ...
この問題は以前に取り組まれたことがあると思います。それについて行くための最良の方法は何ですか?