私はこのスレッドが2年前であることを認識しています...しかし、それは答えられたと感じません。
あなたの質問は、コンポーネントごとに異なるファイルにロギングを出力する方法でした。この質問のタイトルは、あなたがやろうとしていることに対する正しい答えではありません。
DOM設定を使用している場合、異なるファイルに書き込む複数のAppenderを簡単に定義できます。
<appender name="LogFileA" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logA.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
<appender name="LogFileB" class="org.apache.log4j.FileAppender">
<param name="file" value="/tmp/logs/logB.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %c %-5p (%F:%L) - %m%n"/>
</layout>
</appender>
次に、コンポーネントごとに適切なAppenderを使用するロガーを定義します。
<logger name="componentA">
<priority value="all"/>
<appender-ref ref="LogFileA"/>
</logger>
<logger name="componentB">
<priority value="all"/>
<appender-ref ref="LogFileB"/>
</logger>
を設定し、適切なロガーへのポインタを取得する:私はこの答えは、私はそれが同様の質問と他の誰かを助けることを願って...あなたを助ける疑うものの
log4cxx::xml::DOMConfigurator::configure("xml_config_file");
log4cxx::LoggerPtr componentA = log4cxx::Logger::getLogger("componentA");
log4cxx::LoggerPtr componentB = log4cxx::Logger::getLogger("componentB");
。
私は同じプロセスで実行される2つの異なるコンポーネントを持っています。 2つのプロセスは異なります。両方とも同じ時間に実行される場合と実行されない場合があります。いくつかの時間で両方が実行されることがありますまたはいずれかのいずれかが実行されるいくつかの時間は、両方が実行されているかどうかを知ることはありませんか?両方のコンポーネントが同時に実行されていない場合は、問題はありません。両方のコンポーネントが実行されている場合、ログは最新のコンポーネントに転送されます。どのようにそれを処理するには? –
あなたが言ったように、あなたは両方とも独立した2つのコンポーネントを使用しています。その後、問題なくログコムを別々に起動することができます。あなたが変更しなければならないのはあなたのXML設定ファイルだけです。ログパスを指定するだけです。ここではプロセスやスレッドはありません。問題。下の私の答えをチェックしてください。 – Srijeyanthan