首页 > 解决方案 > 访问在配置文件中初始化的 log4cxx 对象

问题描述

log4cxx 的新手。我有一个配置文件,我在其中定义了 log4cxx 配置。这很好用。我现在要做的是访问该配置文件中定义的对象并扩展它的功能,例如

假设我有一个具有滚动文件附加器的 Log4Cxx 实现。我最终想要做的是能够在 cpp 文件中向该 Appender 添加触发器,以便能够触发翻转。
********* log4cxx.xml *********************

..
..
<appender name="rfa" class="org.apachelog4j.rolling.RollingFileAppender">
   <rollingPolicy class="org.apache.log4j.rolling.rollingPolicy">
     <param name="file" value="logfiles/logfile%d{yyyy-MM-dd}.txt" /> 
   </rollingPolicy>
   <triggeringPolicy
      class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
      <param name="MaxFileSize" value="10MB"
   </triggeringPolicy>
</appender>

我的问题是

  1. 如何在代码文件中修改/添加到此附加程序。我一直在尝试的是

*********LogImplementation.cpp *******'''

#include "LogImplementation.h"
.. 
#include "log4cxx/rolling/rollingpolicy.h"
#include "log4cxx/rolling/rollingfileappender.h"
#include "log4cxx/rolling/filterbasedtriggeringpolicy.h"
#include "log4cxx/helpers/pool.h"
#include "log4cxx/spi/filter.h"
#include "log4cxx/rolling/rollingpolicy.h"
#include "log4cxx/logger.h"

using namespace log4cxx;
using namespace log4cxx::rolling;
using namespace log4cxx::helpers; 
 ..

void LogImplemetation::addFilter()
{
    FilterBasedTriggeringPolicyPtr fbtp = FilterBasedTriggeringPolicyPtr(new FilterBasedTriggeringPolicy());
 
    log4cxx::filter::StringMatchFilter tf;
    tf.setStringToMatch("filterText");
    tf.setAcceptOnMatch(true);

    fbtp->addFilter(&tf);

    Pool p;
    fbtp->activateOptions(p); 
    rfa->setTriggeringPolicy(fbtp);

}

'''

但我收到编译错误,因为它无法将“rfa”识别为滚动文件附加程序对象。我也试过

log4cxx::Appender.rfs->setTriggeringPolicy(fbtp); 但我在'之前得到一个“不合格的ID”。令牌”在这种情况下编译错误。

标签: c++rollingfileappenderlog4cxx

解决方案


推荐阅读