注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

glog和log4plus的线程安全(thread-safe)  

2015-01-22 23:46:13|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
glog的典型用法
LOG(INFO) << "Found " << num_cookies << " cookies";
是线程安全的,宏展开后会等价于新建一个LogMessage对象,然后就是c++ stream的输出,LogMessage实现里面会用锁保证写log那一步是多线程安全的,
另外还有RAW log  的那个头文件里面宏,说是可以写log的过程中都不会发生内存分配(不会依赖外部的其他锁),可以非常非常安全的,甚至在malloc函数里面使用。

log4plus的典型用法
LOG4CPLUS_INFO(logger, "Found " << num_cookies << " cookies");
竟然需要提供一个logger对象,真是蛋疼。
logger对象只是多线程读是安全的,因为一般也都是读操作,应该也是可以在多线程里面对同一个logger
进行LOG4CPLUS_INFO 这样写log 调用的吧(但修改log level等操作就不是多线程安全的了?)。真正把格式化好的log message 刷到后端的appender的时候,是用锁保证安全的。但写全局变量的logger对象也是比较蛋疼的吧。
Logger对象看上去构建代价比较小,多个logger对象可以通过引用计数计数 引用底层 的单一实例的 LoggerImpl的实现的对象, 用锁保证的引用计数的多线程安全。
所以初始化log4cplus好之后,每次调用写log时都建立一个logger对象,感觉也会对性能影响很大。后面有空测试看看,下面这个性能的影响。
LOG4CPLUS_INFO(log4cplus::Logger::getRoot(), "Found " << num_cookies << " cookies");

glog毕竟是google出品的,质量还是要比log4cplus要有保证一些吧,facebook这些大公司也在用,方便性和功能也都比log4cplus来的要好。



  评论这张
 
阅读(1405)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017