C++开源log选用
2016-06-30 15:00
357 查看
C++比较有名的日志类库公有log4cpp 、log4cxx、 log4cplus、glog,其中log4cpp log4xx最近两年都没有更新了。只有log4cplus和glog在更新,因此在log4plus和glog二选一。
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来的要好。
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来的要好。
相关文章推荐
- C++中const用法总结
- CPP 虚函数、虚函数表及虚拟继承(转)
- Deploying Control Plane Policing
- Thrift的required和optional源码分析
- c++中extern关键字详解 知识补充笔记
- MBProgressHUD的基本使用
- 意外的结果-C++中的移位操作
- MFC自定义类访问主窗口控件
- LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 问题解决
- 单向链表LinkedList的使用
- cpp函数返回对象&&数组
- 继承、组合、委托
- vim配置
- LIB和DLL的区别与使用
- Learn note(cpp): take care when use new in a code block.
- 如果在主串Tag的第pos个位置后存在
- BF算法
- 一个悲伤的gcc故事
- 用gcc编译opencv程序出错
- cocos2d-x-3.2创建项目中出现的一些问题