1

我有 2 个不同的 com 组件,它们在同一进程中实例化。两个组件都使用 Log4cxx DomConfigurator 并配置不同的 log4cxx config xml 文件。每个都为日志指定不同的路径。但是日志是在最新实例化的 com 组件指定的路径中创建的。

我希望这 2 个 COM 组件日志将在单独的文件中。如何做到这一点?

4

3 回答 3

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");

虽然我怀疑这个答案会帮助你......我希望它会帮助其他有类似问题的人。

于 2014-10-23T12:00:45.303 回答
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

///////////////////////////////////////// /////////////////// 当你编写第二个组件的配置文件时,只需更改日志路径或文件名。

干杯。

于 2012-05-04T07:28:50.157 回答
0

如果您使用相同的进程或线程,则 logcxx 尝试覆盖前一个。所以最好启动另一个线程并分配 logcxx 来做下一个日志记录。那么一切都会好起来的。

于 2012-05-03T07:40:19.033 回答