ACE库的LOGGING记录使用摘要(1)

大概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));

posted @ 2010-12-01 05:02  胡卜规  阅读(359)  评论(0)    收藏  举报