编译以及加上gflags支持,这些都搞定了。
最大的问题是有内存泄漏。
我们项目是严格要求vs退出时不允许报内存泄漏的,粗略看了下glog的代码,结果发现人家new了不delete的地方比比皆是啊。虽然说人家好像要
么是static的,要么是都加了空判断保证只会new一次,但最后却没个整体清理的地方,这个总不是啥好习惯吧?Linux下这些就不重要嘛?还是真
的就是小细节?总之这一点,估计glog九成九要毙掉了……
= boost::log =
虽然最近才正式批准进了boost的样子,但看了review结果中的critical issues(http://
lists.boost.org/boost-announce/2010/03/0256.php),觉得还是算了。况且在项目里推boost实在是
吃力不讨好……
那么各位还有其它c++的log库的推荐呢?
2010/8/18 pi1ot <pilo...@gmail.com>:
--
Wu Yongwei
URL: http://wyw.dcweb.cn/
造一个新轮子,嘿嘿。
看过log4系列,跟我们的项目需求还是觉得不能很好匹配。自己实现了一个,也就500行左右的实际代码。
我来解释下为什么他没有delete因为有可能一个类在析构的时候做logend::~end(){log << "end";]
而这个end类又可能是全局的或者静态的,无法保证他先于log析构,所以只能不delete。
--Jianfei WANG (frank28_nfls)
Twitter @frank28_nfls
我来解释下为什么他没有delete因为有可能一个类在析构的时候做logend::~end(){log << "end";]
而这个end类又可能是全局的或者静态的,无法保证他先于log析构,所以只能不delete。
要解决这个问题很简单,把new/delete重载了指向你自己的内存分配器,然后程序退出的时候把你的内存分配器一次性释放掉,这样就不会报内存泄漏了。
How about this: http://logging.apache.org/log4cxx/index.html
没错,编个了log4cxx,1.6M
但是还没有尝试其他的,不知道有没有只需要简单加几个文件到可以使用的
我自己的代码里有这个例子:
http://nvwa.cvs.sourceforge.net/viewvc/nvwa/nvwa/debug_new.h?view=markup
http://nvwa.cvs.sourceforge.net/viewvc/nvwa/nvwa/debug_new.cpp?view=markup
__debug_new_counter类的唯一用途就是记录还有几个文件目前仍然在使用
debug_new,并在没有时调用内存泄漏检查函数。我也使用过这个技巧处理全局
对象的析构。
2010/8/18 jiang yu <yu.jia...@gmail.com>:
> 我来解释下为什么他没有delete
> 因为有可能一个类在析构的时候做log
> end::~end()
> {
> log << "end";
> ]
> 而这个end类又可能是全局的或者静态的,无法保证他先于log析构,所以只能不delete。
> 在 2010年8月19日 上午11:06,frank28 <fra...@gmail.com>写道:
>>
>> = 关于google-glog =
>> 一直想加个log库,本来glog关注满久的了,也见到之前Shuo Chen的推荐,打算就认它了,结果用了才知道世界没那么完美的。
>>
>> 编译以及加上gflags支持,这些都搞定了。
>> 最大的问题是有内存泄漏。
>> 我们项目是严格要求vs退出时不允许报内存泄漏的,粗略看了下glog的代码,结果发现人家new了不delete的地方比比皆是啊。虽然说人家好像要
>> 么是static的,要么是都加了空判断保证只会new一次,但最后却没个整体清理的地方,这个总不是啥好习惯吧?Linux下这些就不重要嘛?还是真
>> 的就是小细节?总之这一点,估计glog九成九要毙掉了......
>>
>> = boost::log =
>> 虽然最近才正式批准进了boost的样子,但看了review结果中的critical issues(http://
>> lists.boost.org/boost-announce/2010/03/0256.php),觉得还是算了。况且在项目里推boost实在是
>> 吃力不讨好......
>>
>> 那么各位还有其它c++的log库的推荐呢?