ACE日志重定向(一)
来源:互联网 发布:手机淘宝怎么充钱 编辑:程序博客网 时间:2024/05/09 10:56
前面提到的日志功能,只是简单的将日志打印出来,拥有了重定向功能后,这样的日志将会更强大。
今天暂时将相关重定向的代码贴上来。再次申请,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_NDEBUG 0
#define ACE_NTRACE 0
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_;
};
typedef ACE_Singleton<LogManager, ACE_Null_Mutex>
LogManagerSingleton;
#define Log_MANAGER LogManagerSingleton::instance();
LogManager::LogManager():log_stream_ (0), output_stream_ (0)
...{
}
LogManager::~LogManager()
...{
if (log_stream_)
log_stream_->close();
delete log_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 类的主要局限是,它假定输出每次只去往一个地方。对于我们一些小的例子而言足够,但对于足够复杂的工程则远远不够,如何克服这个局限其实也不难,下次将做进一步的改进。
*/
//
#include "ace/log_msg.h"
#include "ace/Object_Manager.h"
#include "aceSingleton.h"
#include<fstream>
using std::ofstream;
#pragma once
#define ACE_NDEBUG 0
#define ACE_NTRACE 0
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_;
};
typedef ACE_Singleton<LogManager, ACE_Null_Mutex>
LogManagerSingleton;
#define Log_MANAGER LogManagerSingleton::instance();
LogManager::LogManager():log_stream_ (0), output_stream_ (0)
...{
}
LogManager::~LogManager()
...{
if (log_stream_)
log_stream_->close();
delete log_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日志重定向(一)
- ACE日志系统 之二(ACE的重定向)
- ACE(一):使用ACE日志设施
- weblogic日志重定向
- iOS--日志重定向
- shell日志重定向
- 使用ACE日志设施(一)HelloWorld
- ACE日志输出的几种重定向方式
- ACE日志输出的几种重定向方式
- Bash Shell 重定向(一):原文
- 数据流重定向(一)
- weblogic11g 启动日志重定向
- iOS日志本地化--日志重定向
- 程序日志输出(简单的重定向)
- 重定向输出流实现程序日志(学习)
- modelandview重定向一例
- DB2重定向恢复备份(包括日志)
- 关闭重定向Tomcat的控制台日志
- 爱迪生欺骗了世界 - 马云对雅虎员工的精彩演讲
- 找資源真難
- An Introduction to WCF for Device Developers
- MSDN Webcast 预告:Visual Studio 2008 移动开发新体验
- 在img里的onload事件 使图片按比例缩放 及其注意事项
- ACE日志重定向(一)
- 2008年最后一篇,本学期本学期第一篇
- 15 Search Engines To Search Files on Rapidshare
- 随感
- 计算机中常用英文缩写
- 方便的工具与勤思的大脑
- 驗證嗎
- [读书笔记-1] 卓有成效的管理者(彼得.德鲁克)
- Universal Import Fixer (UIF) v1.0 FINAL by Magic_h2001