前面提到的日志功能,只是简单的将日志打印出来,拥有了重定向功能后,这样的日志将会更强大。 今天暂时将相关重定向的代码贴上来。再次申请,vs2005下编译通过。 下次再进行改进,并更上所有测试程序。 // LogManager.h: // #include " ace/log_msg.h " #include " ace/Object_Manager.h " #include " aceSingleton.h " #include < fstream > using std::ofstream; #pragma once #define ACE_NDEBUG0 #define ACE_NTRACE0 class LogManager ... { public : LogManager(); ~ LogManager(); void redirectToDaemon ( const ACE_TCHAR * prog_name = ACE_TEXT( "" )); void redirectToSyslog ( const ACE_TCHAR * prog_name = ACE_TEXT( "" )); void redirectToOStream(ACE_OSTREAM_TYPE * output); void redirectToFile( const char * filename); void redirectToStderr( void ); ACE_Log_Msg_Callback * redirectToCallback (ACE_Log_Msg_Callback * callback); private : std::ofstream * log_stream_; ACE_OSTREAM_TYPE * output_stream_; } ; typedefACE_Singleton < LogManager,ACE_Null_Mutex > LogManagerSingleton; #define Log_MANAGERLogManagerSingleton::instance(); LogManager::LogManager():log_stream_( 0 ),output_stream_( 0 ) ... { } LogManager:: ~ LogManager() ... { if (log_stream_) log_stream_ -> close(); deletelog_stream_; } void LogManager::redirectToSyslog( const ACE_TCHAR * prog_name) ... { ACE_LOG_MSG -> open(prog_name,ACE_Log_Msg::SYSLOG,prog_name); } void LogManager::redirectToDaemon( const ACE_TCHAR * prog_name) ... { ACE_LOG_MSG -> open(prog_name,ACE_Log_Msg::LOGGER, ACE_DEFAULT_LOGGER_KEY); } void LogManager::redirectToOStream(ACE_OSTREAM_TYPE * output) ... { output_stream_ = output; ACE_LOG_MSG -> msg_ostream( this -> output_stream_); ACE_LOG_MSG -> clr_flags( ACE_Log_Msg::STDERR | ACE_Log_Msg::LOGGER); ACE_LOG_MSG -> set_flags(ACE_Log_Msg::OSTREAM); } void LogManager::redirectToFile( const char * filename) ... { log_stream_ = new std::ofstream(); log_stream_ -> open(filename,ios:: out | ios::app); this -> redirectToOStream(log_stream_); } void LogManager::redirectToStderr( void ) ... { ACE_LOG_MSG -> clr_flags( ACE_Log_Msg::OSTREAM | ACE_Log_Msg::LOGGER); ACE_LOG_MSG -> set_flags(ACE_Log_Msg::STDERR); } ACE_Log_Msg_Callback * LogManager::redirectToCallback(ACE_Log_Msg_Callback * callback) ... { ACE_Log_Msg_Callback * previous = ACE_LOG_MSG -> msg_callback(callback); if (callback == 0 ) ... { ACE_LOG_MSG -> clr_flags(ACE_Log_Msg::MSG_CALLBACK); } else ... { ACE_LOG_MSG -> set_flags(ACE_Log_Msg::MSG_CALLBACK); } return previous; } /**/ /* LogManager类的主要局限是,它假定输出每次只去往一个地方。对于我们一些小的例子而言足够,但对于足够复杂的工程则远远不够,如何克服这个局限其实也不难,下次将做进一步的改进。 */ ACE日志重定向(一) 更多文章、技术交流、商务合作、联系博主 微信扫码或搜索:z360901061 微信扫一扫加我为好友 QQ号联系: 360901061 您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。 【本文对您有帮助就好】元 2元 5元 10元 20元 自定义 喜欢作者