⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loghandle.cpp

📁 一个利用ACE的日志设施编写的日志处理类
💻 CPP
字号:
// name: LogHandle.cpp
// desc: CLogHandle log处理类,记录 发送接收的消息
// create time: 
// Autor:
// modify:


#include "stdafx.h"
#include "LogHandle.h"
#include "MessageID.h"

#include "ace/Log_Msg.h"

#include <fstream>

#define MEMBER_ACE_DEBUG( X ) \
	do { \
	int __ace_error = ACE_Log_Msg::last_error_adapter (); \
	ACE_Log_Msg *ace___ = &m_log; \
	ace___->conditional_set (__FILE__, __LINE__, 0, __ace_error); \
	ace___->log X; \
	} while (0)

static char chConst[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
	
////////////////////////////////////////////////////////////////
//	
CLogHandle::CLogHandle( )
{
	m_pLogOutput = NULL;
}
CLogHandle::~CLogHandle()
{
	if( m_pLogOutput != NULL )
	{
		m_log.clr_flags( ACE_Log_Msg::OSTREAM );
		
		delete m_pLogOutput;
		m_pLogOutput = NULL;
	}
}
//////////////////////////////////////////////////////////
//
bool CLogHandle::init( const char * logfilename, const char* LogSrc )
{
	ACE_ASSERT(m_pLogOutput==NULL);
	
	m_pLogOutput = new std::ofstream( logfilename );
	m_log.msg_ostream( m_pLogOutput, 0 );
	m_log.set_flags( ACE_Log_Msg::OSTREAM );
	m_log.clr_flags( ACE_Log_Msg::STDERR );

	MEMBER_ACE_DEBUG( ( LM_DEBUG, ACE_TEXT( " %s, Time[%D], Line[%l]\n" ), 
		LogSrc) );

	return true;
}
void CLogHandle::WriteInfoToLog( const char* strOrient, const PACKET_ADDR &addrRecv, const PACKET_MSG &msgRecv, const int& msgLen )
{
    char buf[512];

	ACE_TString strInfo = ACE_TEXT("\r\n");
	strInfo += strOrient;
	
	sprintf(buf,"  SIP:%d.%d.%d.%d	",(BYTE)(addrRecv.dwSIP>>24), (BYTE)(addrRecv.dwSIP>>16),
		(BYTE)(addrRecv.dwSIP>>8), (BYTE)(addrRecv.dwSIP));
	strInfo += buf;
	
	sprintf(buf,"  DIP:%d.%d.%d.%d	",(BYTE)(addrRecv.dwDIP>>24), 
		(BYTE)(addrRecv.dwDIP>>16),(BYTE)(addrRecv.dwDIP>>8),(BYTE)(addrRecv.dwDIP));
	strInfo += buf;
	
	sprintf(buf," Ha:%2x%2x	",addrRecv.ha[ 1 ], addrRecv.ha[ 0 ]);
	strInfo += buf;
			
	sprintf(buf," SessionID:%d	",(ACE_UINT16)msgRecv.wSessionId);
	strInfo += buf;

	const char * msgIdDesc = MSG_DESC_Find( msgRecv.wMsgId );
	sprintf(buf," MsgID:(%4x,%s)", msgRecv.wMsgId, msgIdDesc );
	strInfo += buf;
	
	strInfo += "\r\npure:";
	ChangeIntToString( ( BYTE* )msgRecv.msg, msgLen, strInfo, true );
	
	MEMBER_ACE_DEBUG( ( LM_DEBUG, ACE_TEXT( " %s, Time[%D], Line[%l]\n" ), strInfo.c_str()) );
}
////////////////////////////////////////////////////////////
// name:	ChangeIntToString
// desc:	把整数转换成 字符串
////////////////////////////////////////////////////////////
void CLogHandle::ChangeIntToString( const BYTE* str, const int nLen, ACE_TString& strRet, bool bPureMsg )
{
	BYTE nTmp;

	if ( bPureMsg )
	{
		for ( int i = 0; i < nLen; i ++)
		{
			nTmp = *( str + i );
			strRet += chConst[ ( nTmp >> 4 ) & 0x0F ];
			strRet += chConst[ nTmp & 0x0F ];
			strRet += " ";
		}
		return;
	}
	for ( int i = nLen - 1; i >= 0; i -- )
	{
		nTmp = *( str + i );
		strRet += chConst[ ( nTmp >> 4 ) & 0x0F ];
		strRet += chConst[ nTmp & 0x0F ];
		strRet += " ";
	}
}

void CLogHandle::WriteStringToLog(const char *str)
{
	ACE_TString strInfo = "\r\n";
	strInfo += str;
	MEMBER_ACE_DEBUG( ( LM_DEBUG, ACE_TEXT( " %s, Time[%D], Line[%l]\n" ), strInfo.c_str()) );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -