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")));
}