📄 embolog.cpp
字号:
// Logger.cpp: implementation of the EmboLog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "EmboLog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
EmboLog::~EmboLog()
{
}
void EmboLog::Write(const char *format, ...)
{
char buf1[1024]= {0};
char buf2[1024]= {0};
if(!m_bLogEnable)
{
return;
}
va_list ap;
va_start(ap, format);
// 取得格式串
_vsnprintf(buf1, sizeof(buf1)/sizeof(char)-1, format, ap);
buf1[sizeof(buf1)/sizeof(char)-1]=0;
// 将Log信息加上模块名
if(m_szModuleName)
{
sprintf(buf2,"%s::", m_szModuleName);
buf2[sizeof(buf2)/sizeof(char)-1]=0;
}
if(strlen(buf1) + strlen(buf2) < sizeof(buf1)/sizeof(char))
{
strcat(buf2, buf1);
}
else
{
strcpy(buf2, buf1);
}
// 写文件
WriteToIO(buf2, strlen(buf2));
va_end(ap);
}
void EmboLog::WriteToIO(char *content, DWORD dwNumOfByteToWrite)
{
DWORD dwNumOfByteWritten = 0;
HANDLE hLogFile = 0;
if(!content || dwNumOfByteToWrite == 0)
{
return;
}
if((hLogFile = ::CreateFile(m_szLogFileName, GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
FILE_FLAG_WRITE_THROUGH, 0))
== INVALID_HANDLE_VALUE)
{
return;
}
// 将文件指针移动到文件尾
::SetFilePointer(hLogFile, 0, 0, FILE_END);
::WriteFile(hLogFile, (LPCVOID)content, dwNumOfByteToWrite,
&dwNumOfByteWritten, NULL);
::FlushFileBuffers(hLogFile);
CloseHandle(hLogFile);
}
BOOL EmboLog::GetRegLogEnable(BOOL *dwLogEnable)
{
HKEY hKey = 0;
DWORD dwSize = 8;
DWORD dwType = 0;
DWORD dwLenOfBuf = 0;
char szbBuffer[8] = {0};
if(!dwLogEnable)
{
return FALSE;
}
if(
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
!= ERROR_SUCCESS)
{
return FALSE;
}
if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_ENABLE, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
!= ERROR_SUCCESS)
{
return FALSE;
}
::RegCloseKey(hKey);
if(dwType != REG_DWORD)
{
return FALSE;
}
*dwLogEnable = (BOOL)szbBuffer[0];
return TRUE;
}
BOOL EmboLog::CheckLogTooLarge()
{
HANDLE hLog = 0;
DWORD dwSizeLow = 0;
BOOL bRet = FALSE;
if((hLog = ::CreateFile(m_szLogFileName, GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_FLAG_WRITE_THROUGH, 0))
== INVALID_HANDLE_VALUE)
{
return TRUE;
}
dwSizeLow = GetFileSize(hLog, NULL);
CloseHandle(hLog);
return (BOOL)(dwSizeLow >= m_dwLogMaxSize);
}
BOOL EmboLog::GetRegLogMaxSize(DWORD *dwLogMaxSize)
{
HKEY hKey = 0;
DWORD dwSize = 8;
DWORD dwType = 0;
DWORD dwLenOfBuf = 0;
char szbBuffer[8] = {0};
if(!dwLogMaxSize)
{
return FALSE;
}
if(
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
!= ERROR_SUCCESS)
{
return FALSE;
}
if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_MAXSIZES, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
!= ERROR_SUCCESS)
{
return FALSE;
}
::RegCloseKey(hKey);
if(dwType != REG_DWORD)
{
return FALSE;
}
*dwLogMaxSize |= (DWORD)szbBuffer[0] ;
*dwLogMaxSize |= (DWORD)szbBuffer[1] << 8;
*dwLogMaxSize |= (DWORD)szbBuffer[2] << 16;
*dwLogMaxSize |= (DWORD)szbBuffer[3] << 24;
return TRUE;
}
BOOL EmboLog::GetRegLogFileName(TCHAR *pszLogFileName)
{
HKEY hKey = 0;
DWORD dwSize = MAX_PATH;
DWORD dwType = 0;
DWORD dwLenOfBuf = 0;
char szbBuffer[MAX_PATH] = {0};
if(!pszLogFileName)
{
return FALSE;
}
if(
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_LOG_KEY, 0, 0, &hKey)
!= ERROR_SUCCESS)
{
return FALSE;
}
if(::RegQueryValueEx(hKey, REG_KEY_EMBO_LOG_LOGFILE, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
!= ERROR_SUCCESS)
{
return FALSE;
}
::RegCloseKey(hKey);
if(dwType != REG_SZ)
{
return FALSE;
}
_tcsncpy((LPTSTR)pszLogFileName, (LPTSTR)szbBuffer, MAX_PATH);
return TRUE;
}
BOOL EmboLog::GetRegSnPath(TCHAR *pszSnPath)
{
HKEY hKey = 0;
DWORD dwSize = MAX_PATH;
DWORD dwType = 0;
DWORD dwLenOfBuf = 0;
char szbBuffer[MAX_PATH] = {0};
if(!pszSnPath)
{
return FALSE;
}
if(
::RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_EMBO_SYS_KEY, 0, 0, &hKey)
!= ERROR_SUCCESS)
{
return FALSE;
}
if(::RegQueryValueEx(hKey, REG_KEY_EMBO_SNPATH, NULL, &dwType, (PBYTE)szbBuffer, &dwSize)
!= ERROR_SUCCESS)
{
return FALSE;
}
::RegCloseKey(hKey);
if(dwType != REG_SZ)
{
return FALSE;
}
_tcsncpy((LPTSTR)pszSnPath, (LPTSTR)szbBuffer, MAX_PATH);
return TRUE;
}
EmboLog::EmboLog(char *pszModuleName)
{
BOOL bEnable = FALSE;
DWORD dwMaxSize = 0;
TCHAR szFileName[MAX_PATH];
memset(m_szModuleName, 0, sizeof(m_szModuleName)/sizeof(char));
if(pszModuleName)
{
strncpy(m_szModuleName, pszModuleName, sizeof(m_szModuleName)/sizeof(char));
m_szModuleName[sizeof(m_szModuleName)/sizeof(char)-1]=0;
}
// 设置默认值
// 不写Log
m_bLogEnable = FALSE;
// Log文件最大为1024字节
m_dwLogMaxSize = 1024;
// Log文件名
_tcscpy((LPTSTR)m_szLogFileName, TEXT("EmboLog.txt"));
// 从注册表取出相应值
if(GetRegLogFileName((LPTSTR)szFileName))
{
// 避免溢出
_tcsncpy(m_szLogFileName, szFileName, MAX_PATH-1);
m_szLogFileName[MAX_PATH-1] = 0;
}
if(GetRegLogEnable(&bEnable))
{
m_bLogEnable = bEnable;
}
if(GetRegLogMaxSize(&dwMaxSize))
{
m_dwLogMaxSize = dwMaxSize;
}
// 取得SNPATH
WCHAR *buffer = _wcsdup(m_szLogFileName);
if(GetRegSnPath(szFileName))
{
if(szFileName[_tcslen(szFileName)-1] == '\\')
{
swprintf((LPWSTR)m_szLogFileName, L"%s%s",
(LPWSTR)szFileName,
(LPWSTR)buffer);
}
else
{
swprintf((LPWSTR)m_szLogFileName, L"%s\\%s",
(LPWSTR)szFileName,
(LPWSTR)buffer);
}
}
free(buffer);
// 检查Log文件是否过大,是则删除重建
if(CheckLogTooLarge())
{
DeleteFile(m_szLogFileName);
}
}
void EmboLog::Write(const WCHAR *format, ...)
{
WCHAR buf1[1024]= {0};
char buf2[1024]= {0};
char buf3[1024]= {0};
if(!m_bLogEnable)
{
return;
}
va_list ap;
va_start(ap, format);
// 取得格式串
_vsnwprintf(buf1, sizeof(buf1)/sizeof(WCHAR)-1, format, ap);
buf1[sizeof(buf1)/sizeof(WCHAR)-1]=0;
wcstombs(buf3, buf1, sizeof(buf1)/sizeof(char));
buf3[sizeof(buf1)/sizeof(char)-1]=0;
// 将Log信息加上模块名
if(m_szModuleName)
{
sprintf(buf2, "%s::", m_szModuleName);
buf2[sizeof(buf2)/sizeof(char)-1]=0;
}
if(strlen(buf3) + strlen(buf2) < sizeof(buf3)/sizeof(char))
{
strcat(buf2, buf3);
}
else
{
strcpy(buf2, buf3);
}
// 写文件
WriteToIO(buf2, strlen(buf2));
va_end(ap);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -