`
isiqi
  • 浏览: 16495999 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ACE日志重定向(一)

iOS 
阅读更多

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

今天暂时将相关重定向的代码贴上来。再次申请,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类的主要局限是,它假定输出每次只去往一个地方。对于我们一些小的例子而言足够,但对于足够复杂的工程则远远不够,如何克服这个局限其实也不难,下次将做进一步的改进。
*/
分享到:
评论

相关推荐

    日志系统之ACE日志服务[文].pdf

    ACE日志服务是ACE库的一个功能模块,具有线程安全、灵活、分级显示等特点,可以面向程序调试、运行、测试、和维护等全生命周期,可以选择将信息输出到屏幕、文件、系统日志等多种目标。 1. 日志输出宏 ACE日志...

    Linux开发工程师开发入门手册

    log4cpp 是一个推荐的日志库,支持多线程,日志重定向到网络等功能。日志操作是必须的,可以方便查找问题,记录程序运行的一些情况。 四、管理后台 管理后台是 Linux 开发工程师必须掌握的另一个重要方面。提供一个...

    linuxdds.pdf

    最后,执行`make clean && make`命令进行编译,编译日志可以重定向到文件中,以便后续排查错误。 如果编译过程中出现错误,你可以检查错误日志文件`make-dds.log`和`make-dds-err.log`,根据提示解决问题。可能需要...

    linuxdds.docx

    在描述中,`make-dds.log 2&gt;make-dds-err.log`命令用于执行编译,并将日志输出重定向,以便于查看编译过程中可能遇到的错误。 6. **DDS核心部分源码**: OpenDDS的源码包含了DDS的核心组件,如DCPS(Data ...

    Cisco Press:Cisco Wide Area Application Services Technical Training (WAAS) v4.0.7 Vol.2

    #### 知识点一:WAAS设备安装与配置 **概述:** 本章节主要介绍了Cisco WAAS(广域应用服务)设备的安装及初始配置过程。WAAS技术旨在通过优化网络流量、提高应用性能和降低带宽需求来改善广域网内的应用响应时间。...

    WinRAR_4.0.exe

    令是一个字符串(或单个的字母),命令 RAR 去执行一个相应的操作。开关被用来 改变 RAR 执行操作的方法。其它参数是压缩文件名和被压缩的文件或要从压缩文件 中被解压文件。 列表文件是一个包括处理的文件名的纯...

    中文简体压缩软件RAR 6.0

    包含两个掩码,并且所有文件及匹配第一个掩码,也匹配第二个掩码, 第一个掩码 将拥有更高的优先权,即使它被放到第二个后面。例如,存在*.cpp 和 f*.cpp 掩码 的情况下,f*.cpp 拥有更高的优先权。 RAR ...

    网管教程 从入门到精通软件篇.txt

    ACE:Ace压缩档案格式 ACT:Microsoft office助手文件 AIF,AIFF:音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式 ANI:Windows系统中的动画光标 ARC:LH ARC的压缩档案文件 ARJ:Robert ...

    Windows 系统错误代码简单分析

    可能是一个包含注册表数据文件的结构已损坏,也可能内存中该文件的系统映像已损坏,或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。  1016 由注册表引起的 I/O 操作发生了不可恢复的错误。...

    linux命令之调试工具strace的深入分析

    通过`strace -o &lt;filename&gt;`可以将strace的输出重定向到文件`&lt;filename&gt;`,方便后续分析。 3. **记录系统调用时间** `-T`选项使strace记录每个系统调用所消耗的时间,有助于定位耗时操作。 4. **时间戳显示** `...

    有关命令行CMD命令大全

    `[drive2:][path2]filename2` 表示目标文件或目录,`/a` 表示保留文件属性,`/b` 表示创建基本文件,`/v` 表示验证每个写入的文件,`/y` 表示假设对所有问题的回答都是“是”,`/n` 表示禁止使用重定向。 - **示例**...

Global site tag (gtag.js) - Google Analytics