c++ - 访问在配置文件中初始化的 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>
我的问题是
- 如何在代码文件中修改/添加到此附加程序。我一直在尝试的是
*********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”。令牌”在这种情况下编译错误。
解决方案
推荐阅读
- html - CSS3 过渡只工作一次
- email - 从我的域中的电子邮件帐户发送的电子邮件到达垃圾邮件
- laravel - 如何在 Laravel 中对下载文件名进行单元测试
- c# - 优雅地停止 ASP.NET Core Web App(从 Visual Studio 调试器中),一个与 IHostedService 相关的问题
- python - How do I send things that aren't strings with sockets? E.g taking a screenshot with the client and sending it to the server
- apache-flink - 生产者(kafka)不产生新行时如何让Flink刷新最后一行
- excel - 合并工作簿并验证重复项
- google-chrome - Chrome 开发工具:显示 cookie
- mysql - 在 where 子句中使用 if()
- ios - 编程不向给定电话号码发送验证码