2

私たちのチームは、シングルビルド状態に到達しようとしています。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 ...

この問題は以前に取り組まれたことがあると思います。それについて行くための最良の方法は何ですか?

4

2 に答える 2

2

Log4j apiを使用して、コードを介してログレベルを設定します。そのため、環境に応じて、アプリの起動時にログ構成を設定できます。もちろん、必要に応じて、さまざまなパッケージのログレベルを定義する適切なUIを提供することで、実行時に構成可能にすることもできます。

于 2013-03-21T13:52:14.187 に答える
2

これを改善するためのいくつかの試みがありましたが、これまでのところ「標準」ソリューションを考え出した人は誰もいません。

  • MBeanを使用してロギングを構成できます。

    長所:実行時にリモートで構成を簡単に変更できます
    短所:この方法で構成「プロファイル」(つまり、有用な構成のセット)を保存/収集することはできません。

  • ロギングフレームワークを作成して、Webアプリの外部から構成をロードできます。

    長所:構成はファイルに簡単に収集できます。
    ビルド時のスクリプトを使用して、テンプレートなどから生成できます。

    短所:これらのファイルをどこかに保存したり、バックアップ/インストールしたりする必要があります。
    何も見つからない場合にデフォルトの構成をロードする方法を理解する方がよいでしょう。

  • アプリケーションが実行時に構成を切り替えることを許可できます。初期設定がスタートアップの問題をデバッグするのに役立つことを確認してください

  • logbackなどの一部のロギングフレームワークでは、構成ファイルを含めることができます。これにより、共有構成を簡単にロードし、単一のシステムプロパティを使用して、オーバーライドを使用してロードするインクルードファイルを指定できます。

現時点では、最後のアプローチを選択します。これは、任意の数の特別な構成を許可するためです。テストチームは、独自のチームを持ち、自分で管理し、好きな場所に配置し、自由に更新することができます。

log4jをslf4j/logbackに置き換えることは、いくつかのJARファイルを置き換えることを意味することに注意してください。Mavenを使用する場合、2分かかります(依存関係として追加logback-classiclog4j-over-slf4jて削除するだけですlog4j

于 2013-03-21T14:06:31.557 に答える