ACE日志重定向(一)

本文介绍了使用ACE库实现日志重定向的方法,包括重定向到系统日志、守护进程、标准错误输出、文件和回调函数等不同目标。通过这些重定向功能可以增强日志记录的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面提到的日志功能,只是简单的将日志打印出来,拥有了重定向功能后,这样的日志将会更强大。

今天暂时将相关重定向的代码贴上来。再次申请,vs2005下编译通过。

下次再进行改进,并更上所有测试程序。

//LogManager.h:
//
#include"ace/log_msg.h"
#include
"ace/Object_Manager.h"
#include
"aceSingleton.h"

#include
<fstream>
usingstd::ofstream;

#pragmaonce

#defineACE_NDEBUG0
#defineACE_NTRACE0


classLogManager
...{
public:
LogManager();
~LogManager();

voidredirectToDaemon
(
constACE_TCHAR*prog_name=ACE_TEXT(""));
voidredirectToSyslog
(
constACE_TCHAR*prog_name=ACE_TEXT(""));

voidredirectToOStream(ACE_OSTREAM_TYPE*output);
voidredirectToFile(constchar*filename);
voidredirectToStderr(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;
#defineLog_MANAGERLogManagerSingleton::instance();

LogManager::LogManager():log_stream_(
0),output_stream_(0)
...{

}


LogManager::
~LogManager()
...{
if(log_stream_)
log_stream_
->close();

deletelog_stream_;
}


voidLogManager::redirectToSyslog(constACE_TCHAR*prog_name)
...{
ACE_LOG_MSG
->open(prog_name,ACE_Log_Msg::SYSLOG,prog_name);
}


voidLogManager::redirectToDaemon(constACE_TCHAR*prog_name)
...{
ACE_LOG_MSG
->open(prog_name,ACE_Log_Msg::LOGGER,
ACE_DEFAULT_LOGGER_KEY);
}


voidLogManager::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);
}


voidLogManager::redirectToFile(constchar*filename)
...{
log_stream_
=newstd::ofstream();
log_stream_
->open(filename,ios::out|ios::app);
this->redirectToOStream(log_stream_);
}


voidLogManager::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);
}


returnprevious;
}


/**//*
LogManager类的主要局限是,它假定输出每次只去往一个地方。对于我们一些小的例子而言足够,但对于足够复杂的工程则远远不够,如何克服这个局限其实也不难,下次将做进一步的改进。
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值