#include "stdafx.h"
#include "ACE_Tools.h"
#include "ace/Log_Msg.h"
#include
#include
using namespace std;
bool CACETools::CreateACELog()
{
SYSTEMTIME st;
CString filePath;
GetLocalTime(&st);
filePath.Format("ACE_LOG_TEST
ddd-dd-dd",st.wYear,st.wMonth,st.wDay,
st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);
filePath +=CString(".log");
//获取当前路径
char path[MAX_PATH];
DWORD dw = GetCurrentDirectory(MAX_PATH,path);
if (dw)
{
CString moduleName(path);
filePath =
moduleName+CString("\\ace_test_log\\")+filePath;
moduleName += "\\ace_test_log\\";
//判断当前路径文件夹是否存在
dw = _access(moduleName,0);
if (dw == -1)
{
//当前文件不存在,创建新的文件
SECURITY_ATTRIBUTES Sa;
Sa.nLength = sizeof(SECURITY_ATTRIBUTES);
Sa.bInheritHandle = FALSE;
Sa.lpSecurityDescriptor = NULL;
if (!CreateDirectory(moduleName,&Sa))
{
ACE_DEBUG((LM_DEBUG,ACE_TEXT("[%D]无法创建log目录\n")));
return 0;
}
}
}
else
{
ACE_DEBUG((LM_DEBUG,ACE_TEXT("[%D]无法获取当前路径\n")));
return 0;
}
//创建ACE输出
u_long lmask = 0 ;
if(0) lmask |= LM_TRACE ;
if(1) lmask |= LM_DEBUG ;
if(1) lmask |= LM_INFO ;
if(1) lmask |= LM_NOTICE ;
if(1) lmask |= LM_WARNING ;
if(1) lmask |= LM_ERROR ;
//设置ACE_LOG_MSG实例能够输出的信息内容
ACE_LOG_MSG->priority_mask (lmask,
ACE_Log_Msg::PROCESS);
//清除掉不必要的输出方式
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::LOGGER);
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::MSG_CALLBACK);
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::VERBOSE);
//带有目标地址
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::VERBOSE_LITE);
ACE_LOG_MSG->clr_flags (ACE_Log_Msg::SILENT);
//没有清除掉STDERR 和 OSTREAM,表明可以从标准输出流 和 文件流 输出
//ACE_LOG_MSG->clr_flags (ACE_Log_Msg::STDERR);
//ACE_LOG_MSG->clr_flags (ACE_Log_Msg::OSTREAM);
wchar_t wpath[MAX_PATH] = {0};
::MultiByteToWideChar(CP_ACP,0,filePath,filePath.GetLength(),wpath,
MAX_PATH);
ofstream* log_file = new
ofstream(wpath,ios::out|ios::app);
if (log_file && log_file->bad())
{
log_file->close();
delete log_file;
log_file = NULL;
ACE_DEBUG((LM_DEBUG,ACE_TEXT("[%D]创建输出流失败\n")));
return 0;
}
else
{
//修改ACE_LOG_MSG实例的输出方式
ACE_LOG_MSG->set_flags(ACE_Log_Msg::OSTREAM);
//指定ACE_LOG_MSG实例输出文件
ACE_LOG_MSG->msg_ostream(log_file,true);
}
}
void CACETools::AECLogTest(void)
{
for (int i=0;i<10;i++)
{
//以STDERR 和 OSTREAM 方式输出信息
ACE_DEBUG((LM_INFO,ACE_TEXT("[%D]当前编号为%d\n"),i));
ACE_OS::sleep(1);
}
}