大概3年前我开始寻找一个LOGGING的C++库, 主要的要求是:
- 容易使用, 支持PRINTF的格式化输出
- 能够将记录导向到文件去, 支持SYSLOG导向更好
- 同时支持WINDOWS和LINUX
- 分级记录, 能够关闭一些级别的记录, 能够完全关掉记录最佳
对这些要求解释一下。 传统上iostream的输出被推崇, 但是根据我多年的经验而言效果并不好,一般写的代码要大于printf, 而且输出控制很差。 很多多年的C++ 程序员也搞不清如何将一个字符串右排, 而同样的功能printf就简单多了。 GOOGLE C++程序员指引也说 - iostream应该尽量少用。
在分级输出上一般人都明白这道理 - 一个大的程序可能会有大量的LOG记录, 不仅损害程序的性能, 而且太多LOG无法容易找到问题的源头。对我们的程序来说, 还希望能够完全关掉LOGGING。
当时找了一下专门的LOGGING库, 比如log4cxx, log4cplus, and Log4cpp。 最后落到了ACE上。 比较而言ACE的功能相当地全, 而且增加的代码很少.
本文不打算讨论ACE库的别的东西, 比如如何编译等等。 要说明的是, ACE库文档要求你的程序启动时调用ACE::init()以及程序关闭是调用ACE::fini(). 根据我的测试, 如果只是写到终端或者文件, 这是不需要的。 但是如果要使用高级的导向就需要了。
ACE LOGGING基本上只掌握一个宏: ACE_DEBUG。 别的什么都不用了。
ACE_DEBUG
这个宏调用的格式是:
ACE_DEBUG((severity, formatting-args));
要注意的是这里的双括号。 正是有了这个双括号,所用的LOGGING语句能够扩展到空, 如果需要的话。括号里面是两个参数 - 第一个参数是记录的级别, 后面就是跟printf类似的东西。
下面就是一个简单的LOGGING语句:
ACE_DEBUG((LM_INFO, "Loop %d: x=%0.2f", i, x));
原文链接: https://www.cnblogs.com/CplusplusExpert/archive/2010/12/01/ACE_Logging.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/18147
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!