关闭

ACE的日志入门

1999人阅读 评论(0) 收藏 举报
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的日志等级。
 
       文件
       ofstreamstream("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在错误日志的记录上使用了回调的技术。然而,什么东西都是两面的,如果不是很理解回调的话,最好还是不要轻易用回调。
考虑如下代码
classMyCallback:publicACE_Log_Msg_Callback
{
public:
       virtualvoidlog (ACE_Log_Record &log_record)
       {

              printf("Only Test/n");

       }
};
ofstreamstream("UVMG.log");
MyCallbackcall;
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:613056次
    • 积分:9793
    • 等级:
    • 排名:第1787名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论