1

以下は私のクラスの詳細です。ClassA と ClassD は実行可能なクラスです。ClassA から ClassB と ClassC を呼び出しています。

package comp1 -> Contains ClassA, ClassB, ClassC
package comp2 -> Contains ClassD, ClassE

Log for comp1 -> comp1.log
Log for comp2 -> comp2.log

ロギングにLog4jを使用しています。パッケージ名に基づいて 2 つのロガーがあります。ClassEClassBから電話していClassDます。現在、comp1.logからのロギング メッセージが含まれており、ClassBおよびからのcomp2.logログが含まれていClassDますClassE

プロセスベースのログを作成するにはどうすればよいですか? 実行するClassDClassD、 、ClassEおよびClassB. これはLog4jを使用して可能ですか?

4

2 に答える 2

1

1つの解決策は、システム変数を使用することです。log4j.xmlにこのようなものを書くことができます

<appender name="ProductionLog" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="c:/logs/myLog-${myProcId}.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="10000KB"/>
    <param name="MaxBackupIndex" value="10"/>
    <layout class="org.apache.log4j.EnhancedPatternLayout">
        <param name="ConversionPattern" value="[%d] [%-5p] {%c|%t}: %m%n"/>
    </layout>
</appender>

重要なのは、システム変数$ {myProcId}
の使用法です。 たとえば、Log4jを初期化する前にシステム変数を指定できます。

System.setProperty("myProcId", procId);
DOMConfigurator.configure(log4jFilePath);
于 2012-08-16T09:45:06.310 に答える
0

それには多くの方法があります。個人的には、ログに追加情報を追加してから、ログ処理を使用してそれらを再び分割します。Linux ベースの場合、これは非常に簡単で、余分な処理を書き込み時間ではなく読み取り時間に移すことができます。

追加情報を追加する方法は次のとおりです。

別のアプローチは、コンストラクターによって特定の名前 (ProcessA、ProcessB) で初期化される個別のロガーを使用することです。依存関係をインスタンス化するときに、代替ロガー名を渡して、コンストラクターまたはプロパティ インジェクションで使用できます。Spring を使用している場合、これは簡単です。そうでない場合は、ファクトリ パターンがあなたの友人になると思います。

お役に立てれば。

于 2012-08-16T10:03:06.980 に答える