返回信息流有这么两个问题:
1。new 了一个logger,能有什么办法主动把这个logger给free掉么?
2。有这么两个函数,removeAllAppender和removeAppender(string),当我调用第一个的时候,内存一直在增长,但是,调用第二个函数的时候,确能够控制内存不增长。有人懂这个类吗?
PS:代码贴在下面了
#include <log4cxx/logger.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/logger.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/patternlayout.h>
#include <log4cxx/consoleappender.h>
#include <log4cxx/fileappender.h>
#include <log4cxx/rollingfileappender.h>
#include <log4cxx/asyncappender.h>
#include <log4cxx/dailyrollingfileappender.h>
#include <log4cxx/propertyconfigurator.h>
#include <log4cxx/ndc.h>
using namespace log4cxx;
using namespace std;
using namespace log4cxx;
int main(int argc, char* argv[])
{
LoggerPtr r_logPtr;
log4cxx::LogString conversionPattern;
conversionPattern = "%d{%m/%d %H:%M:%S} %m %n";
int count = 0;
while(1)
{
{
log4cxx::PatternLayoutPtr layout(new
log4cxx::PatternLayout(conversionPattern));
log4cxx::RollingFileAppenderPtr file(new
log4cxx::RollingFileAppender(layout, log4cxx::LogString("abc.log"), true));
file->setName("a");
file->setMaxBackupIndex(10);
file->setMaxFileSize(log4cxx::LogString("10MB"));
log4cxx::helpers::Pool p;
file->activateOptions(p);
char buf[128];
sprintf(buf, "%d", count++%10);
r_logPtr = log4cxx::Logger::getLogger(buf);
r_logPtr->addAppender(file);
}
usleep(1);
getchar();
{
log4cxx::RollingFileAppenderPtr fileAppenderPtr =
r_logPtr->getAppender("a");
printf("fileAppenderPtr's name:%s\n", fileAppenderPtr->getName().c_str());
r_logPtr->removeAppender(fileAppenderPtr);
}
//r_logPtr->removeAllAppenders();
printf("count:%d", count);
fflush(stdout);
getchar();
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #48492同步于 2010/12/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
有人用过log4cxx么?
CK
2010/12/29镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
没用过啊。。。你怎么搞这了
【 在 CK (CK) 的大作中提到: 】
: 有这么两个问题:
: 1。new 了一个logger,能有什么办法主动把这个logger给free掉么?
: 2。有这么两个函数,removeAllAppender和removeAppender(string),当我调用第一个的时候,内存一直在增长,但是,调用第二个函数的时候,确能够控制内存不增长。有人懂这个类吗?
: ...................
=.=
看我的IP。。。。
他们让我搞这个的。。
我搞了几天了,没有相关文档
就说这东西在进程结束的时候会自动释放,不会有memory leaks。。。。
问题是,运行环境是要有上千个logger。。。
用fork的话,资源占用更大。。。
然后,我就纠结了。。。。
【 在 GTQ (『热情一顶乐团』副团长|【回帖终结者A2】) 的大作中提到: 】
: 没用过啊。。。你怎么搞这了
呃。不明白反正。。
【 在 CK (CK) 的大作中提到: 】
: =.=
: 看我的IP。。。。
: 他们让我搞这个的。。
: ...................
log4cxx::RollingFileAppenderPtr看起来像一个自动管理资源的智能指针,可以从这方面考虑看看,要能看源码的话查阅一下那两个函数的源码
楼主代码表达的意思不太清楚,如果你的这句r_logPtr->removeAllAppenders();
是写在while(1)执行体外面的话,那它只在结束的时候才执行一次,之前addAppend产生的内存分配会越来越大,如果写在循环体内可能就可以吧,楼主可以试一试~
执行是在while(1)里面的
然后,如果每一次对r_logPtr进行removeAppender是可以释放空间的
但是,每一次用removeAllAppenders,就会不断增长内存。。。
【 在 wo (喔哈) 的大作中提到: 】
log4cxx::RollingFileAppenderPtr看起来像一个自动管理资源的智能指针,可以从这方面考虑看看,要能看源码的话查阅一下那两个函数的源码
楼主代码表达的意思不太清楚,如果你的这句r_logPtr->removeAllAppenders();
是写在while(1)执行体外面的话,那它只在结束的时候才执行一次,之前addAppend产生的内存分配会越来越大,如果写在循环体内可能就可以吧,楼主可以试一试~