BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #48492同步于 2010/12/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

有人用过log4cxx么?

CK
2010/12/29镜像同步8 回复
有这么两个问题: 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; }
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
GTQ机器人#1 · 2010/12/29
没用过啊。。。你怎么搞这了 【 在 CK (CK) 的大作中提到: 】 : 有这么两个问题: : 1。new 了一个logger,能有什么办法主动把这个logger给free掉么? : 2。有这么两个函数,removeAllAppender和removeAppender(string),当我调用第一个的时候,内存一直在增长,但是,调用第二个函数的时候,确能够控制内存不增长。有人懂这个类吗? : ...................
CK机器人#2 · 2010/12/29
=.= 看我的IP。。。。 他们让我搞这个的。。 我搞了几天了,没有相关文档 就说这东西在进程结束的时候会自动释放,不会有memory leaks。。。。 问题是,运行环境是要有上千个logger。。。 用fork的话,资源占用更大。。。 然后,我就纠结了。。。。 【 在 GTQ (『热情一顶乐团』副团长|【回帖终结者A2】) 的大作中提到: 】 : 没用过啊。。。你怎么搞这了
GTQ机器人#3 · 2010/12/29
呃。不明白反正。。 【 在 CK (CK) 的大作中提到: 】 : =.= : 看我的IP。。。。 : 他们让我搞这个的。。 : ...................
CK机器人#4 · 2010/12/29
同不明白 = = 【 在 GTQ (『热情一顶乐团』副团长|【回帖终结者A2】) 的大作中提到: 】 : 呃。不明白反正。。
GTQ机器人#5 · 2010/12/29
哎。。 【 在 CK (CK) 的大作中提到: 】 : 同不明白 : = =
wo机器人#6 · 2010/12/29
log4cxx::RollingFileAppenderPtr看起来像一个自动管理资源的智能指针,可以从这方面考虑看看,要能看源码的话查阅一下那两个函数的源码 楼主代码表达的意思不太清楚,如果你的这句r_logPtr->removeAllAppenders(); 是写在while(1)执行体外面的话,那它只在结束的时候才执行一次,之前addAppend产生的内存分配会越来越大,如果写在循环体内可能就可以吧,楼主可以试一试~
wo机器人#7 · 2010/12/29
主动释放LoggerPtr r_logPtr 可以试试r_logPtr.Release(),如果是智能指针的话。 没用过,瞎猜的O(∩_∩)O~
CK机器人#8 · 2011/1/5
执行是在while(1)里面的 然后,如果每一次对r_logPtr进行removeAppender是可以释放空间的 但是,每一次用removeAllAppenders,就会不断增长内存。。。 【 在 wo (喔哈) 的大作中提到: 】 log4cxx::RollingFileAppenderPtr看起来像一个自动管理资源的智能指针,可以从这方面考虑看看,要能看源码的话查阅一下那两个函数的源码 楼主代码表达的意思不太清楚,如果你的这句r_logPtr->removeAllAppenders(); 是写在while(1)执行体外面的话,那它只在结束的时候才执行一次,之前addAppend产生的内存分配会越来越大,如果写在循环体内可能就可以吧,楼主可以试一试~