3

私はいくつかの依存関係を持つMavenプロジェクトを持っており、log4j.properties出力を制御するために使用しています。場合によっては、同じクラスが異なるパラメーターを持つ異なるプロパティ ファイルで参照されることがあります。プロパティを「オーバーライド」するための定義済みのプロトコルはありますか、それともパッケージがロードされる順序に依存しますか?

(私はすべてlog4j.properties直下に位置しsrc/main/resourcesています - これは正しい場所ですか?)

更新:解決策を簡単にするわけではありませんが、理にかなっているので@Assenの回答を受け入れました。基本的に、彼は jar から log4j.properties を除外することを推奨しています。原則として同意しますが、出力を制御する負担がユーザーにかかり、ほとんどのユーザーは Java が何であるかを知りません。プロパティ ファイルは言うまでもありません。おそらく、各 jar 内のプロパティ ファイルの名前を変更し、スイッチ (おそらく -D を使用) を使用してプロパティを有効にする方法があります。

4

1 に答える 1

1

私はよくプロジェクトについて同様の議論をします。通常、log4j.properties は、アプリケーションから除外したいものであり、戦争にパックしてコードと一緒に配信したくないものです。ロギング構成:

  • 環境固有です。アプリケーションを作成するとき、必要なアペンダー、ファイルの場所などを定義することはできません。
  • そのライフサイクルは、アプリケーションのライフサイクルとはまったく異なります。アプリケーションがデプロイされた後、ロギング プロパティは 1 日に数回変更できます。アプリケーションを再デプロイしても、最後のログ設定は上書きされません。

では、ロギング構成をコードと一緒にパッケージ化するのはなぜですか? 通常、「dev」、「test-server-01」、「macbook-john」などのサブフォルダーを含む構成フォルダーをどこかに保持します。各サブフォルダーには、log4j.properties のリスト独自のコピーが含まれます。jar または war のいずれも、ビルド アーティファクトには含まれていません。

展開時に、これらのサブフォルダーの 1 つが個別に配信されます。テスト サーバー 1 の場合、これは test-server-01 サブフォルダーのコンテンツになります。使用するアプリケーション サーバーによっては、いくつかのファイルをクラスパスに配置する別の方法があります。

開発時には、これらのサブフォルダーのいずれかをパスに設定するように注意しています。ジョンが自分の macbook で開発するとき、クラスパスに 'macbook-jihn' を配置するか、新しいクラスパスを作成したいと思うかもしれません。彼はロギング設定を変更し、競合することなくコミットできます。

于 2012-12-04T11:01:37.630 に答える