我有 2 个不同的 com 组件,它们在同一进程中实例化。两个组件都使用 Log4cxx DomConfigurator 并配置不同的 log4cxx config xml 文件。每个都为日志指定不同的路径。但是日志是在最新实例化的 com 组件指定的路径中创建的。
我希望这 2 个 COM 组件日志将在单独的文件中。如何做到这一点?
我意识到这个线程已有几年历史了......但不觉得它得到了回答。
您的问题是如何将日志记录输出到每个组件的不同文件。这个问题的标题“单个进程中的多个 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");
虽然我怀疑这个答案会帮助你......我希望它会帮助其他有类似问题的人。
具有此代码的组件 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
///////////////////////////////////////// /////////////////// 当你编写第二个组件的配置文件时,只需更改日志路径或文件名。
干杯。
如果您使用相同的进程或线程,则 logcxx 尝试覆盖前一个。所以最好启动另一个线程并分配 logcxx 来做下一个日志记录。那么一切都会好起来的。