我有2个不同的com组件,它们在同一个进程中实例化。这两个组件都使用Log4cxx DomConfigurator并配置不同的log4cxx config xml文件。每个都指定日志的不同路径。但是日志是在最新实例化的com组件指定的路径中创建的。
我希望这两个COM组件日志将在单独的文件中。怎么做到这一点?
答案 0 :(得分:0)
如果您使用相同的进程或线程,则logcxx会尝试覆盖之前的进程或线程。所以最好启动另一个线程并分配logcxx来进行下一次日志记录。那一切都会好的。
答案 1 :(得分:0)
具有此代码的组件1或者您可以在任何组件可以使用的logcxx包装器公共类中编写。
strPath = "AppLog1.dat";
log4cxx::BasicConfigurator::configure();
log4cxx::File cfgFile(strPath);
log4cxx::PropertyConfigurator::configureAndWatch(cfgFile, 60000);
组件2具有相同的代码,具有不同的AppLog2.dat文件
示例dat文件。
#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)
我意识到这个帖子已经有几年了......但是不觉得它得到了回答。
您的问题是如何将每个组件的日志记录输出到不同的文件。这个问题的标题是“单个进程中的多个DOM配置器”......对于您正在尝试做的事情而言,这不是正确的答案。
如果您使用的是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");
虽然我怀疑这个答案会对你有所帮助......我希望它会帮助其他有类似问题的人。