ACE程序员指南:第三章ACE日志

1.测试程序:testlog.cpp代码如下:

#include "ace/OS_main.h"
#include "ace/Log_Msg.h"
//#define ACE_NTRACE 0		
/*类似的ACE_NDEBUG ACE_NERROR;如果ACE_NTRACE为1,标示不生产ACE_TRACE的日志*/

void foo(void);

int ACE_TMAIN(int argc,ACE_TCHAR *argv[])
{
	ACE_TRACE(ACE_TEXT("main"));

	ACE_DEBUG((LM_INFO,ACE_TEXT("%IhelloWorld\n")));	//%I,控制输出格式
	ACE_DEBUG((LM_INFO,ACE_TEXT("%IAAA")	ACE_TEXT("BBB\n")));
	ACE_DEBUG((LM_ERROR,ACE_TEXT("%ICCC\n")));			//在输出窗口上未标示日志级别
// 	ACE_LOG_MSG->priority_mask(LM_DEBUG|LM_NOTICE,ACE_Log_Msg::PROCESS);
	/*priority_mask修改日志的输出级别,上句标示只显示LM_DEBUG和LM_NOTICE的日志,其他的日志被忽略掉*/
	
	int i = 7;
// 	ACE_DEBUG((LM_ERROR,ACE_TEXT("num=%d",i)));		//错误的写法,未找到输出数字的方法
	foo();
	ACE_DEBUG((LM_DEBUG,ACE_TEXT("%Immmmmmmmm\n")));
	
	system("pause");
	return 0;
}
void foo(void)
{
	ACE_TRACE(ACE_TEXT("foo"));
	ACE_DEBUG((LM_NOTICE,ACE_TEXT("%IHHHHHHHHH\n")));
}

2.启用和禁用日志级别:

日志设置的宏,ACE_NDEBUG ACE_NERROR;如果ACE_NTRACE为1,标示不生产ACE_TRACE的日志

测试代码相见上面上节例子

ACE_LOG_MSG的两个函数:u_long priority(MASK_TYPE = THREAD)用于读取设置的日志显示级别

u_long priority(u_long,MASK_TYPE = THREAD) 用于设置要希望显示的日志级别


3. 定制ACE日志宏:

测试代码 trace.h
#ifndef TRACE_H_
#define TRACE_H_


#define DEBUG_PREFIX			ACE_TEXT("DEBUG %I")
#define INFO_PREFIX				ACE_TEXT("INFO %I")
#define NOTICE_PREFIX			ACE_TEXT("NOTICE%I")
#define WARNING_PREFIX			ACE_TEXT("WARNING%I")
#define ERROR_PREFIX			ACE_TEXT("ERROR%I")
#define CRITICAL_PREFIX			ACE_TEXT("CRITICAL%I")
#define ALERT_PREFIX			ACE_TEXT("ALERT%I")
#define EMERGENCY_PREFIX		ACE_TEXT("EMERGENCY%I")

#define MY_DEBUG(FMT)		ACE_DEBUG((LM_DEBUG,DEBUG_PREFIX	FMT))
#define MY_INFO(FMT)		ACE_DEBUG((LM_INFO,INFO_PREFIX	FMT))
#define MY_NOTICE(FMT)		ACE_DEBUG((LM_NOTICE,NOTICE_PREFIX	FMT))
#define MY_WARNING(FMT)		ACE_DEBUG((LM_WARNING,WARNING_PREFIX	FMT))
#define MY_ERROR(FMT)		ACE_DEBUG((LM_ERROR,ERROR_PREFIX	FMT))
#define MY_CRITICAL(FMT)	ACE_DEBUG((LM_CRITICAL,CRITICAL_PREFIX	FMT))
#define MY_ALERT(FMT)		ACE_DEBUG((LM_ALERT,ALERT_PREFIX	FMT))
#define MY_EMERGENY(FMT)	ACE_DEBUG((LM_EMERGENCY,EMERGENCY_PREFIX	FMT))

#endif
main.cpp 代码如下
#include "ace/OS_main.h"
#include "ace/Log_Msg.h"
#include "Trace.h"

void foo();

int ACE_TMAIN(int ,char* argv[])
{
	ACE_TRACE(ACE_TEXT("MAIN"));
	MY_DEBUG(ACE_TEXT("TEST\n"));
	

	MY_NOTICE(ACE_TEXT("TEST\n"));		
	MY_WARNING(ACE_TEXT("TEST\n"));		
	MY_ERROR(ACE_TEXT("TEST\n"));		
	MY_CRITICAL(ACE_TEXT("TEST\n"));	
	MY_ALERT(ACE_TEXT("TEST\n"));		
	MY_EMERGENY(ACE_TEXT("TEST\n"));
	
	foo();
	system("pause");
	return 0;
}
void foo()
{
	ACE_TRACE(ACE_TEXT("FOO"));
	MY_INFO(ACE_TEXT("TEST\n"));
}

3.4 重定向日志输出:

ACE日志的三个输出地方:STDERR、SYSLOG、OFSTREAM
测试程序:
#include "ace/OS_main.h"
#include "ace/Log_Msg.h"
//#include "ace/Stream.h"
#include "ace/streams.h"	//应该包含streams.h不是Stream.h,啊!搜了半天错误

void foo();

int ACE_TMAIN(int argc,char* argv[])
{

// 	// test1 系统日志记录器
// 	ACE_TRACE(ACE_TEXT("main"));
// 	ACE_DEBUG((LM_DEBUG, ACE_TEXT("%IHI,MAIN\n")));
// 	//everything from foo will be directed to the system logger
// 	ACE_LOG_MSG->open(argv[0],ACE_Log_Msg::SYSLOG,ACE_TEXT("syslogTest"));
// 	foo();
// 	ACE_LOG_MSG->open(argv[0]);
// 	ACE_DEBUG((LM_DEBUG,ACE_TEXT("%IBYE,MAIN\n")));

	

	//test2 综合三种输出:stderr,syslog,ofstream
	ACE_TRACE(ACE_TEXT("MAIN"));
 	ACE_OSTREAM_TYPE *output = new std::ofstream("ostream.output.test");
	const char *filename = "output";
	ofstream outfile (filename, ios::out | ios::trunc);

	ACE_DEBUG((LM_DEBUG,ACE_TEXT("%I this will go to stderr\n")));
	ACE_LOG_MSG->open(argv[0],ACE_Log_Msg::SYSLOG,ACE_TEXT("syslogTest"));		//显示在stderr上
	ACE_LOG_MSG->set_flags(ACE_Log_Msg::STDERR);
	ACE_DEBUG((LM_DEBUG,ACE_TEXT("%I this goes to stderr & syslog\n")));		//显示在stderr上

	ACE_LOG_MSG->msg_ostream(output,0);
	ACE_LOG_MSG->set_flags(ACE_Log_Msg::OSTREAM);
	ACE_DEBUG((LM_DEBUG,ACE_TEXT("%Ithis will go to STDERR") ACE_TEXT("syslog & an ostream\n")));	//在日志文件和stderr上显示
	
	ACE_LOG_MSG->clr_flags(ACE_Log_Msg::OSTREAM);
	delete output;

	system("pause");
	return 0;
};

void foo()
{
	ACE_TRACE(ACE_TEXT("foo"));
	ACE_DEBUG((LM_DEBUG, ACE_TEXT("%IBYE,FOO\n")));
}

3.5 使用回调:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值