ACE的日志入门

ACE就不多说的,先说日志。
       屏幕输出
ACE的日志是否复杂,我也不知道,但可以从现在开始一步一步入门。ACE默认的输出方式是输出到屏幕。这就是一种方式。
ACE_LOG_MSG -> set_flags ( ACE_LOG_MSG -> STDERR );
       ACE_DEBUG (( LM_WARNING , ACE_TEXT ( "TEST/n" )));
也可以这样。
              ACE_LOG_MSG -> open ( "TestLog" , ACE_Log_Msg :: STDERR );
       ACE_DEBUG (( LM_WARNING , ACE_TEXT ( "TEST/n" )));
       其实第一句都还是不必要的,因为默认的方式就是使用屏幕打印。除非使用重定向,否则不需要特别说明。ACE的日志系统不是靠宏名本身,而是靠宏的第一个参数,即Severity Level来区分日志信息类型。
      
       系统日志
       在Windows事件察看器来看,存在应用程序日志,而通过ACE可以简单的把代码写到应用程序日志上去。

ACE_LOG_MSG->open("TestLog", ACE_Log_Msg::SYSLOG, ACE_TEXT ("ACE log"));

       ACE_DEBUG (( LM_TRACE , ACE_TEXT ( "TEST3/n" )));
       这个地方很简单,查找最底层的代码调用了:: ReportEventA()。这个地方比较有意思。ACE根据LM设定的等级,翻译成SYSLOG的日志等级。
 
       文件
       ofstream stream ( "UVMG.log" );
       ACE_LOG_MSG -> msg_ostream (& stream ,0);
       ACE_LOG_MSG -> set_flags ( ACE_LOG_MSG -> OSTREAM | ACE_LOG_MSG -> STDERR );
       ACE_DEBUG (( LM_TRACE , ACE_TEXT ( "TEST3/n" )));
       ACE_ERROR (( LM_ERROR , ACE_TEXT ( "TEST1/n" )));
考虑如上代码,上面的代码同时支持写文件和屏幕打印。需要注意的是 msg_ostream支持自动删除输出流,这个地方可以放心的new输出流。这个地方是需要注意的,因为ACE_LOG_MSG使用了Singleton,也就是说,同时只有一个输入输出流的存在,如果想写不同的文件,需要在流之间切换。
 
回调函数
C++回调函数的目的是为了让用户可以实现自己的函数实现,而被系统调用。NMS在错误日志的记录上使用了回调的技术。然而,什么东西都是两面的,如果不是很理解回调的话,最好还是不要轻易用回调。
考虑如下代码
class MyCallback : public ACE_Log_Msg_Callback
{
public :
       virtual void log ( ACE_Log_Record & log_record )
       {

              printf("Only Test/n");

       }
};
ofstream stream ( "UVMG.log" );
MyCallback call ;
ACE_LOG_MSG -> msg_ostream (& stream ,0);
ACE_LOG_MSG -> msg_callback (& call );
ACE_LOG_MSG -> set_flags ( ACE_LOG_MSG -> OSTREAM | ACE_LOG_MSG -> STDERR | ACE_LOG_MSG -> MSG_CALLBACK );
ACE_DEBUG (( LM_TRACE , ACE_TEXT ( "TEST3/n" )));
ACE_ERROR (( LM_ERROR , ACE_TEXT ( "TEST1/n" )));
       从这一段的代码看出来,其实 log是让用户自己实现对log的定制。然后进行注册就可以了以后所有的调用会支持用户的实现。
 

// Enable the bits in the logger's options flags.
void set_flags (unsigned long f);

// Disable the bits in the logger's options flags.
void clr_flags (unsigned long f);

       这个地方是支持用户或上标识的。可以支持各种日志方式。目前支持的方式有:

STDERR                     屏幕打印
LOGGER                     把日志写到Log的客户端
OSTREAM                  把日志写到输出流
MSG_CALLBACK        把日志写到回调函数中
VERBOSE                   准备好程序名称, timestamp, host name, process ID, and消息优先级
VERBOSE_LITE          准备好timestamp and message priority
SILENT                             Do not print messages at all
SYSLOG                     Write messages to the system's event log
CUSTOM                    Write messages to the user-provided back end

VERBOSE和VERBOSE_LITE极为好用,省了很多事情。关于Client/Server会在今后涉及。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值