| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 | 
							- #include "StdAfx.h"
 
- #include "SimpleLog.h"
 
- /////////////////////////////////////////////////////////////////////////////
 
- //CSimpleLog implements
 
- /////////////////////////////////////////////////////////////////////////////
 
- CCriticalSection CSimpleLog::cs;
 
- CString CSimpleLog::m_strLogDir;
 
- CString CSimpleLog::m_strFileName;
 
- BOOL CSimpleLog::m_bSaveFlag = TRUE;
 
- int CSimpleLog::m_nLevel = CSimpleLog::debug;
 
- BYTE CSimpleLog::m_nDelDay = 0;
 
- int CSimpleLog::m_nDaysNum = 0;
 
- void CSimpleLog::SetFileName(CString strFileName)
 
- {
 
- 	m_strFileName = strFileName;
 
- }
 
- void CSimpleLog::CreateLogDir(LPCTSTR lpszDir)
 
- {
 
- 	CString strLogDir;
 
- 	if(lpszDir == NULL)
 
- 		strLogDir = ".\\log\\";
 
- 	else
 
- 		strLogDir = lpszDir;
 
- 	m_strLogDir = strLogDir;
 
- 	DWORD dwAttr = ::GetFileAttributes(strLogDir);
 
- 	if((dwAttr == -1) || ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == 0))
 
- 	{
 
- 		::CreateDirectory(strLogDir, NULL);
 
- 	}
 
- }
 
- CString CSimpleLog::GetLevelName(int nLevel)
 
- {
 
- 	switch(nLevel)
 
- 	{
 
- 	case CSimpleLog::debug:
 
- 		return  _T("debug");
 
- 	case CSimpleLog::info:
 
- 		return _T("info");
 
- 	case CSimpleLog::warn:
 
- 		return _T("warn");
 
- 	case CSimpleLog::error:
 
- 		return _T("error");
 
- 	case CSimpleLog::fatal:
 
- 		return _T("fatal");
 
- 	default:
 
- 		return _T("");
 
- 	}
 
- }
 
- void CSimpleLog::DeleteLogFile()
 
- {
 
- 	if(m_nDaysNum == 0)
 
- 		return;
 
- 	CTimeSpan tmSpan(m_nDaysNum, 0, 0, 0);
 
- 	CTime tmDelDay = CTime::GetCurrentTime() - tmSpan;
 
- 	SYSTEMTIME stDelDay;
 
- 	tmDelDay.GetAsSystemTime(stDelDay);
 
- 	//减少删除调用;
 
- 	if(m_nDelDay != stDelDay.wDay)
 
- 	{
 
- 		CString strLogName;
 
- 		strLogName.Format(_T("%s%s_log_%04d%02d%02d.txt"), m_strLogDir, 
 
- 			m_strFileName, stDelDay.wYear, stDelDay.wMonth, stDelDay.wDay);
 
- 		::DeleteFile(strLogName);
 
- 		m_nDelDay = (BYTE)stDelDay.wDay;
 
- 	}
 
- }
 
- void CSimpleLog::Save(CString strLog, bool bDay, int nLevel)
 
- {
 
- 	if (strLog.IsEmpty())
 
- 		return ;
 
- 	if(!m_bSaveFlag || (nLevel < m_nLevel))
 
- 		return;
 
- 	SYSTEMTIME st;
 
- 	::GetLocalTime(&st);
 
- 	CString strLogName;
 
- 	if(bDay)
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log_%04d%02d%02d.txt"),
 
- 			CSimpleLog::GetAppDir() + _T("log\\"), m_strFileName, st.wYear, st.wMonth, st.wDay);
 
- 		//删除以前的日志;
 
- 		DeleteLogFile();
 
- 	}
 
- 	else
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log.txt"), m_strLogDir, m_strFileName);
 
- 	}
 
- 	CString strLevel = GetLevelName(nLevel);
 
- 	cs.Lock();
 
- 	FILE *f;
 
- 	errno_t err = fopen_s(&f,(LPCSTR)CStringA(strLogName), "a+");
 
- 	if(err == 0)
 
- 	{
 
- 		fprintf(f, "%04d-%02d-%02d %02d:%02d:%02d %s %s\r\n", 
 
- 			st.wYear, st.wMonth, st.wDay, 
 
- 			st.wHour, st.wMinute, st.wSecond, strLevel, strLog);
 
- 		fclose(f);
 
- 	}
 
- 	cs.Unlock();
 
- }
 
- void CSimpleLog::Save2(void* pdata, int nDataLen, bool bDay /*= true*/, int nLevel /*= 0*/)
 
- {
 
- 	if(!m_bSaveFlag || (nLevel < m_nLevel))
 
- 		return;
 
- 	SYSTEMTIME st;
 
- 	::GetLocalTime(&st);
 
- 	CString strLogName;
 
- 	if(bDay)
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log_%04d%02d%02d.txt"), 
 
- 			m_strLogDir, m_strFileName, st.wYear, st.wMonth, st.wDay);
 
- 		//删除以前的日志;
 
- 		DeleteLogFile();
 
- 	}
 
- 	else
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log.txt"), m_strLogDir, m_strFileName);
 
- 	}
 
- 	CString strLevel = GetLevelName(nLevel);
 
- 	cs.Lock();
 
- 	FILE *f;
 
- 	errno_t err = fopen_s(&f, (LPCSTR)(CStringA(strLogName)), "a+");
 
- 	if(err == 0)
 
- 	{
 
- 		fprintf(f, "%04d-%02d-%02d %02d:%02d:%02d %s ", 
 
- 			st.wYear, st.wMonth, st.wDay, 
 
- 			st.wHour, st.wMinute, st.wSecond, strLevel);
 
- 		fwrite(pdata, 1, nDataLen, f);
 
- 		fprintf(f, "\r\n");
 
- 		fclose(f);
 
- 	}
 
- 	cs.Unlock();
 
- }
 
- void CSimpleLog::SaveLastErrorInfo(CString strFileName, int lineinfo)
 
- {
 
- 	LPVOID lpMsgBuf;
 
- 	FormatMessage(
 
- 		FORMAT_MESSAGE_ALLOCATE_BUFFER |
 
- 		FORMAT_MESSAGE_FROM_SYSTEM |
 
- 		FORMAT_MESSAGE_IGNORE_INSERTS,
 
- 		NULL,
 
- 		GetLastError(),
 
- 		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
 
- 		(LPTSTR) &lpMsgBuf,
 
- 		0,
 
- 		NULL
 
- 		);
 
- 	CString strLog;
 
- 	strLog.Format(_T("%s:%d:%s"), strFileName, lineinfo, (char*)lpMsgBuf);
 
- 	Save(strLog, true, CSimpleLog::error);
 
- 	LocalFree(lpMsgBuf);
 
- 	lpMsgBuf = nullptr;
 
- }
 
- CString CSimpleLog::GetHexString(LPBYTE pData, int nLength)
 
- {
 
- 	CString strHex;
 
- 	for(int i = 0; i<nLength; i++)
 
- 	{
 
- 		char szByte[4] = {0};
 
- 		_snprintf_s(szByte, 4, "%02X ", pData[i]);
 
- 		strHex += szByte;
 
- 	}
 
- 	return strHex;
 
- }
 
- CString CSimpleLog::GetHexString(LPBYTE pData, int nLength, int nLevel)
 
- {
 
- 	if(!m_bSaveFlag || (nLevel < m_nLevel))
 
- 		return CString();
 
- 	return GetHexString(pData, nLength);
 
- }
 
- CString CSimpleLog::GetAppDir()
 
- {
 
- 	char szFileName[_MAX_PATH] = {0};
 
- 	::GetModuleFileNameA(NULL, szFileName, sizeof(szFileName));
 
- 	char drive[_MAX_DRIVE] = {0};
 
- 	char dir[_MAX_DIR] = {0};
 
- 	char filename[_MAX_FNAME] = {0};
 
- 	char ext[_MAX_EXT] = {0};
 
- 	_splitpath_s(szFileName, drive, dir, filename, ext);
 
- 	CStringA strAppDir;
 
- 	strAppDir.Format("%s%s", drive, dir);
 
- 	return CString(strAppDir);
 
- }
 
- // 获取日志文件带目录的文件名;  2015.07.08 by scz 
 
- CString CSimpleLog::GetLogFileName( BOOL bDay /*= TRUE */ )
 
- {
 
- 	SYSTEMTIME st;
 
- 	::GetLocalTime(&st);
 
- 	CString strLogName;
 
- 	if(bDay)
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log_%04d%02d%02d.txt"), 
 
- 			m_strLogDir, m_strFileName, st.wYear, st.wMonth, st.wDay);
 
- 	}
 
- 	else
 
- 	{
 
- 		strLogName.Format(_T("%s%s_log.txt"), m_strLogDir, m_strFileName);
 
- 	}
 
- 	return strLogName;
 
- }
 
- // 打开日志文件; 2015.07.08 by scz
 
- BOOL CSimpleLog::OpenLogFile( void )
 
- {
 
- 	BOOL bResult = FALSE;
 
- 	do 
 
- 	{
 
- 		STARTUPINFO si;		//一些必备参数设置;
 
- 		memset( &si,0,sizeof( STARTUPINFO ) );//初始化si在内存块中的值(详见memset函数);
 
- 		si.cb = sizeof( STARTUPINFO );
 
- 		si.dwFlags = STARTF_USESHOWWINDOW;//指定wShowWindow成员有效;
 
- 		si.wShowWindow = SW_SHOW;
 
- 		PROCESS_INFORMATION pi;//必备参数设置结束;
 
- 		CString strLogName = GetLogFileName();
 
- 		CString szCommandLine = _T("notepad ") + strLogName;
 
- 		// 	if(!CreateProcess(TEXT("c:\\windows\\system32\\notepad.exe"),
 
- 		// 		NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
 
- 		if(!CreateProcess( NULL, //不在此指定可执行文件的文件名;
 
- 			(LPTSTR)(LPCTSTR)szCommandLine, //命令行参数;
 
- 			NULL,		//默认进程安全性;
 
- 			NULL,		//默认进程安全性;
 
- 			FALSE,		//指定当前进程内句柄不可以被子进程继承;
 
- 			CREATE_NEW_CONSOLE, //为新进程创建一个新的控制台窗口;
 
- 			NULL,		//使用本进程的环境变量;
 
- 			NULL,		//使用本进程的驱动器和目录;
 
- 			&si, &pi))
 
- 		{
 
- 			bResult = TRUE;
 
- 		}
 
- 		else
 
- 		{
 
- 			//cout<<"Success!"<<endl;
 
- 		}
 
- 		//关掉句柄;
 
- 		CloseHandle(pi.hThread);
 
- 		CloseHandle(pi.hProcess);
 
- 	} while (0);
 
- 	return bResult;
 
- }
 
 
  |