2012-05-03 28 views
1

私は2つの異なるコンポーネントを同じプロセスでインスタンス化しています。どちらのコンポーネントもLog4cxx DomConfiguratorを使用していて、別のlog4cxx config xmlファイルを設定しています。それぞれは、ログの異なるパスを指定します。しかし、ログは、インスタンス化された最新のcomコンポーネントによって指定されたパスに作成されます。複数のlog4cxx Domコンフィグレータを1つのプロセスで実装

これらの2つのCOMコンポーネントログは個別のファイルになります。これを達成する方法は?

答えて

0

同じプロセスまたはスレッドを使用している場合、logcxxは前のものを上書きしようとします。したがって、別のスレッドを開始し、次のログを行うためにlogcxxを割り当ててください。それからすべてがうまくいく。

+0

私は同じプロセスで実行される2つの異なるコンポーネントを持っています。 2つのプロセスは異なります。両方とも同じ時間に実行される場合と実行されない場合があります。いくつかの時間で両方が実行されることがありますまたはいずれかのいずれかが実行されるいくつかの時間は、両方が実行されているかどうかを知ることはありませんか?両方のコンポーネントが同時に実行されていない場合は、問題はありません。両方のコンポーネントが実行されている場合、ログは最新のコンポーネントに転送されます。どのようにそれを処理するには? –

+0

あなたが言ったように、あなたは両方とも独立した2つのコンポーネントを使用しています。その後、問題なくログコムを別々に起動することができます。あなたが変更しなければならないのはあなたのXML設定ファイルだけです。ログパスを指定するだけです。ここではプロセスやスレッドはありません。問題。下の私の答えをチェックしてください。 – Srijeyanthan

0

このコードを持つコンポーネント1または任意のコンポーネントが使用できるlogcxxラッパー共通クラスで記述することができます。

strPath = "AppLog1.dat"; 
log4cxx::BasicConfigurator::configure(); 
log4cxx::File cfgFile(strPath); 
log4cxx::PropertyConfigurator::configureAndWatch(cfgFile, 60000); 

異なるAppLog2.datファイル

サンプルDATファイルと同じコードを有する成分2。

#Log4cxx configuration file . 
#Final version of log4cxx config 
#Author - Sri 4/5/2012 

# Root logger set to DEBUG using the A2 apender defined above. 
# Set options for appender named 'DT' 
# DT's layout is TTCC, using the 
# ISO8061 date format with context printing enabled. 

log4j.appender.DT=RollingFileAppender 
log4j.appender.DT.layout=TTCCLayout 
log4j.appender.DT.File=.\\log\\log.log 
log4j.appender.DT.layout.ContextPrinting=enabled 
log4j.appender.DT.layout.DateFormat=ISO8601 
log4j.appender.DT.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy 
log4j.appender.DT.rollingPolicy.FileNamePattern=.\\log\\log-%d.log.zip 




# Set options for appender named 'RawAppender' 
# RawAppender's layout is PatternLayout 

log4j.appender.RawAppender=RollingFileAppender 
log4j.appender.RawAppender.layout=TTCCLayout 
log4j.appender.RawAppender.File=.\\log\\Raw.log 
log4j.appender.RawAppender.layout.ContextPrinting=enabled 
log4j.appender.RawAppender.layout.DateFormat=ISO8601 
log4j.appender.RawAppender.rollingPolicy=org.apache.log4j.rolling. 
TimeBasedRollingPolicy 
log4j.appender.RawAppender.rollingPolicy.FileNamePattern=.\\log\\RawData-%d.log.zip 


# Set options for appender named 'ErrorAppender' 
# ErrorAppender's layout is TTCC, using the 
# ISO8061 date format with context printing enabled. 

log4j.appender.ErrorAppender=RollingFileAppender 
log4j.appender.ErrorAppender.MaxBackupIndex=10 
log4j.appender.ErrorAppender.layout=TTCCLayout 
log4j.appender.ErrorAppender.File=.\\log\\Error.log 
log4j.appender.ErrorAppender.layout.ContextPrinting=enabled 
log4j.appender.ErrorAppender.layout.DateFormat=ISO8601 
log4j.appender.ErrorAppender.rollingPolicy=org.apache.log4j.rolling. 
TimeBasedRollingPolicy 
log4j.appender.ErrorAppender.rollingPolicy.FileNamePattern=.\\log\\Error-%d.log.zip 


# Root logger set to DEBUG using the A2 apender defined above. 

log4j.rootLogger=DEBUG, DT 


# The logger 'DTError' inherits its level from the 
# logger hierarchy. Output will go to the appender's of the root 
# logger, DT in this case. 

log4j.logger.DTError=INHERIT,ErrorAppender 

/////////////////////////////////////////// /////////////////////////// 2番目のコンポーネントの構成ファイルを作成するときは、ログのパスまたはファイル名を変更するだけです。

歓声。

0

私はこのスレッドが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"); 

関連する問題