Log4cpp:为中小型C++项目加上log支持
2015-08-16 00:15
239 查看
对于一个上点规模的C++项目而言,Log的作用是毋庸置疑的,出问题的时候,看了Log,常见的问题处理起来自是方便不过,即使遇到麻烦的问题,也可以从log总发现不少蛛丝马迹。因此一个严肃的项目应该从一开始就好好考虑如何打Log,便于分析、维护。
现实的情况却是很多项目都是从最初的数千行代码逐步庞大起来;开始的时候可能为了图方便,加log的方式大多是自己在iostream的基础上自己封装一下;等到项目扩大数十倍的时候,却发现这种方式很力不从心,Log文件凌乱复杂,难以管理。
现有的log工具,基本是分为两个阵营,经典的syslog和花哨强大的log4j,从而衍生出很多个变体。log4j基本已经成为复杂应用程序的log标准了,无奈C++的几个模仿者确各有千秋。我的情况是:
1>不需要复杂的配置,甚至不需要配置文件,但修改log消息格式又要很方便
2>支持自动备份功能
3>多线程安全
4>效率要尽量高
5>不要有其他依赖
log4cpp很轻易的满足了我的要求,只需要用已有的RollingFileAppender准备好后端,创建PatternLayout,一切就可以了;log级别的设置完全和syslog协议一样,很直观,打log地方,调用默认的Category管理器取得一个命名的Category,其他就是简单的调用了: log(), debug(), notice(), info(), notice()....
本来最感兴趣的是log4cxx, Apache的伟大项目,功能也最全,麻烦的是它自带了两个平台库,需要额外依赖;配置文件也要显示准备,感觉太臃肿了,估计大项目采用的吧。
效率上最高的应该是pantheiosle了,据说没开启Log的情况下,overhead几乎是0,作者自称效率是log4cxx的数倍,但也依赖于STLSoft(虽然只有头文件),其打包方式也让人想避而远之,还要用作者自己写的版本选择器来选一个合适的库(Win的情况)。
还有一个是Boost的logging库,用尽了模板技巧,虽然很炫,当时没多少用,也没有通过boost 严格的review,虽然是专家写的,暂时也没时间评估和学习了。
FROM: http://www.cppblog.com/skyscribe/archive/2009/06/18/88035.html?opt=admin
现实的情况却是很多项目都是从最初的数千行代码逐步庞大起来;开始的时候可能为了图方便,加log的方式大多是自己在iostream的基础上自己封装一下;等到项目扩大数十倍的时候,却发现这种方式很力不从心,Log文件凌乱复杂,难以管理。
现有的log工具,基本是分为两个阵营,经典的syslog和花哨强大的log4j,从而衍生出很多个变体。log4j基本已经成为复杂应用程序的log标准了,无奈C++的几个模仿者确各有千秋。我的情况是:
1>不需要复杂的配置,甚至不需要配置文件,但修改log消息格式又要很方便
2>支持自动备份功能
3>多线程安全
4>效率要尽量高
5>不要有其他依赖
log4cpp很轻易的满足了我的要求,只需要用已有的RollingFileAppender准备好后端,创建PatternLayout,一切就可以了;log级别的设置完全和syslog协议一样,很直观,打log地方,调用默认的Category管理器取得一个命名的Category,其他就是简单的调用了: log(), debug(), notice(), info(), notice()....
本来最感兴趣的是log4cxx, Apache的伟大项目,功能也最全,麻烦的是它自带了两个平台库,需要额外依赖;配置文件也要显示准备,感觉太臃肿了,估计大项目采用的吧。
效率上最高的应该是pantheiosle了,据说没开启Log的情况下,overhead几乎是0,作者自称效率是log4cxx的数倍,但也依赖于STLSoft(虽然只有头文件),其打包方式也让人想避而远之,还要用作者自己写的版本选择器来选一个合适的库(Win的情况)。
还有一个是Boost的logging库,用尽了模板技巧,虽然很炫,当时没多少用,也没有通过boost 严格的review,虽然是专家写的,暂时也没时间评估和学习了。
FROM: http://www.cppblog.com/skyscribe/archive/2009/06/18/88035.html?opt=admin
相关文章推荐
- iOS基础班之c语言学习复习查漏
- C++对象模型——对象的构造和解构(第六章)
- C语言/C++ 实现汉诺塔代码
- C++写数据到文件
- c++ public, protected, private成员变量,成员函数继承和访问规则实例代码
- C++对象模型——执行期语意学(第六章)
- C++中public,protected,private访问小结
- C语言 memcpy二维数组的复制
- 关于c++析构函数
- C语言-5
- C语言-4
- C语言-3
- c语言-2
- QT5中的信号与槽与C++ 11的function的配合
- c语言-1
- VS2010 C++ 学习笔记(五) 析构函数 深拷贝浅拷贝 小练习
- C语言一维数组复制
- 推荐!国外程序员整理的 C++ 资源大全
- C/C++内存管理详解
- 推荐!国外程序员整理的 C++ 资源大全