3

JBOSS 4.2.2 サーバーを使用して複数の Web アプリケーションをデプロイしています。各アプリケーションは Hibernate を使用し、アプリケーションごとに個別のログ ファイルと個別のアペンダがあります。現在、1 つのアプリケーションの Hibernate ログ ステートメントは、その特定のアプリケーションのログ ファイルに記録する必要があります。これを達成するためにlog4j.xmlファイルを構成する方法を知っている人はいますか?

4

4 に答える 4

2

JBossでは、ここで説明するようにTCLフィルターを使用できます。操作する構成の部分にフィルターを追加するだけです。

例(上記のソースから少し変更しました。 「アプリケーションを.warファイルとしてデプロイする」セクションを参照してください):

<appender name="App1Log" class="org.apache.log4j.FileAppender">
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler" />
    <param name="Append" value="false"/>
    <param name="File" value="${jboss.server.log.dir}/app1.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%8.8t][%20.20c] %m%n"/>
    </layout>
    <filter class="org.jboss.logging.filter.TCLFilter">
        <param name="AcceptOnMatch" value="true"/>
        <param name="DeployURL" value="app1-exp.war"/>
    </filter>
</appender>
于 2010-02-03T15:11:38.623 に答える
0
  1. NDCを追加します。ログは引き続き同じファイルに移動しますが、ファイルのgrepははるかに簡単になります。
  2. 各アプリケーションが独自のlog4j.xmlを持つことができるように、JBossクラスローディングを変更します
于 2009-11-08T08:53:10.197 に答える
0

複数のアプリケーションでそれぞれ hibernate を実行している場合は、アプリケーション log4j.xml ファイルに hibernate クラスのクラスパス (org.hibernate) を使用して hibernate 用のアペンダーを作成するだけで、出力が指定されたログ ファイルに送信されます。

それでもうまくいかない場合は、休止状態がライブラリ jar にバンドルされている log4j プロパティ ファイルを取得していないことを確認してください。hibernate が log4j.xml ファイルを見つけられない場合、system.out に警告メッセージが表示されます。

カール

于 2009-03-11T21:48:23.327 に答える
0

あなたの問題を正しく理解しているかどうか、100%確信が持てません。ログステートメントを発行するアプリケーションに応じて、同じロガーからの出力を別のファイルに送信したいと考えています。

Log4J はマップされた診断コンテキストを提供します。このコンテキストは、休止状態のコードが実行される前に (アプリケーションに応じて) 別の値に設定できます。hibernate によって発行される各ログステートメントには、MDC の内容も含まれます。

これにより、MDC の内容を検査し、ログ メッセージを別のファイルに書き込む特別なアペンダーを作成できます。

私は、すべてのスレッドが独自のログ ファイルを生成する重いマルチスレッド アプリケーションでこのアプローチを使用しましたが、非常にうまく機能します。

于 2009-10-01T16:56:45.930 に答える