186 lines
3.7 KiB
C++
186 lines
3.7 KiB
C++
#include "StdAfx.h"
|
|
#include ".\basiclog.h"
|
|
#include "process.h"
|
|
|
|
CBasicLog::CBasicLog(void)
|
|
{
|
|
m_strFilePath = "";
|
|
m_bRunFileLog = false;
|
|
m_hFileLogThread = NULL;
|
|
m_hFile = NULL;
|
|
ZeroMemory( m_szNowTime, MAX_TIME_SIZE );
|
|
InitializeCriticalSection(&m_csFileLog);
|
|
}
|
|
|
|
CBasicLog::~CBasicLog(void)
|
|
{
|
|
CloseLog();
|
|
}
|
|
|
|
|
|
BOOL CBasicLog::Init( TCHAR* pszFilePath, TCHAR* pszFileName )
|
|
{
|
|
BOOL bRet = true;
|
|
|
|
m_strFilePath = pszFilePath;
|
|
m_strFilePath += "Log\\";
|
|
m_strFileName = pszFileName;
|
|
|
|
//Log파일을 담을 폴더를 생성한다.
|
|
CreateDirectory( m_strFilePath.data(), NULL );
|
|
m_bRunFileLog = TRUE;
|
|
CreateFileLogThread();
|
|
|
|
return bRet;
|
|
}
|
|
|
|
BOOL CBasicLog::InsertMessage( TCHAR* pszMsg )
|
|
{
|
|
if( m_bRunFileLog == FALSE )
|
|
return FALSE;
|
|
|
|
string strMsg;
|
|
TCHAR szTime[MAX_TIME_SIZE];
|
|
WZTime::GetTime(1, szTime, MAX_TIME_SIZE);
|
|
|
|
strMsg = "[";
|
|
strMsg += szTime; //시간을 넣는다.
|
|
strMsg += "] ";
|
|
strMsg += pszMsg; //메세지를 넣는다.
|
|
strMsg += "\r\n"; //개행문자를 넣는다.
|
|
|
|
EnterCriticalSection( &m_csFileLog );
|
|
m_listFileMsg.push_back(strMsg);
|
|
LeaveCriticalSection( &m_csFileLog );
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
BOOL CBasicLog::CreateFileLogThread()
|
|
{
|
|
unsigned int dwThreadID = 2;
|
|
m_hFileLogThread = (HANDLE)_beginthreadex(NULL, 0, FileLogThread, (void*)this, 0, &dwThreadID);
|
|
if( m_hFileLogThread == NULL )
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
// 파일에 Log 파일 출력
|
|
BOOL CBasicLog::OutputFileLog()
|
|
{
|
|
while( m_bRunFileLog == TRUE )
|
|
{
|
|
Sleep(5);
|
|
|
|
EnterCriticalSection( &m_csFileLog );
|
|
int nSize = (int)m_listFileMsg.size();
|
|
LeaveCriticalSection( &m_csFileLog );
|
|
if( nSize <= 0)
|
|
continue;
|
|
|
|
//파일 버퍼에 있는 내용을 출력
|
|
if( CheckLogTime() == false) // 현재 시간과 저장된 시간이 다르면
|
|
CreateLogFile(); // 새로운 로그 파일을 생성한다.
|
|
|
|
for( int i = 0; i < nSize ; i++ )
|
|
{
|
|
string strMsg;
|
|
EnterCriticalSection( &m_csFileLog );
|
|
strMsg = m_listFileMsg.front();
|
|
m_listFileMsg.pop_front(); //앞부분을 삭제시킨다.
|
|
LeaveCriticalSection( &m_csFileLog );
|
|
|
|
int nCount = (int)strMsg.length();
|
|
SetFilePointer(m_hFile, 0, NULL, FILE_END);
|
|
DWORD dwWritten = 0;
|
|
BOOL bRet = WriteFile(m_hFile, strMsg.c_str(), nCount, &dwWritten, NULL);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//저장된 시간과 시스템 시간을 비교한다.
|
|
BOOL CBasicLog::CheckLogTime()
|
|
{
|
|
ZeroMemory( m_szNowTime, MAX_TIME_SIZE );
|
|
WZTime::GetTime(2, m_szNowTime, MAX_TIME_SIZE );
|
|
|
|
if( (m_strTime.compare( m_szNowTime ) != 0) ) //현재 시간과 시스템 시간이 다르다면
|
|
{
|
|
m_strTime = m_szNowTime; //현재시간으로 설정후 false 리턴.
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//새로운 로그파일을 생성한다.
|
|
BOOL CBasicLog::CreateLogFile()
|
|
{
|
|
CloseHandle(m_hFile);
|
|
|
|
string strFileName(m_strFilePath);
|
|
TCHAR szTime[MAX_TIME_SIZE];
|
|
WZTime::GetTime(2, szTime, MAX_TIME_SIZE);
|
|
|
|
strFileName += "\\";
|
|
strFileName += m_strFileName;
|
|
strFileName += "-";
|
|
strFileName += szTime;
|
|
strFileName += ".txt";
|
|
|
|
m_hFile = CreateFile( strFileName.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL,
|
|
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
|
|
|
|
if(m_hFile == INVALID_HANDLE_VALUE)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
int CBasicLog::GetLogCount( )
|
|
{
|
|
EnterCriticalSection( &m_csFileLog );
|
|
int nCnt = (int)m_listFileMsg.size();
|
|
LeaveCriticalSection( &m_csFileLog );
|
|
return nCnt;
|
|
}
|
|
|
|
unsigned int __stdcall FileLogThread(void* pParam)
|
|
{
|
|
CBasicLog* pLog = (CBasicLog*)pParam;
|
|
pLog->OutputFileLog();
|
|
return 1;
|
|
}
|
|
|
|
|
|
void CBasicLog::CloseLog()
|
|
{
|
|
while( m_bRunFileLog )
|
|
{
|
|
Sleep(1);
|
|
if( m_listFileMsg.size() == 0 )
|
|
m_bRunFileLog = FALSE;
|
|
}
|
|
|
|
WaitForSingleObject( m_hFileLogThread, INFINITE );
|
|
|
|
if( m_hFileLogThread != NULL )
|
|
{
|
|
CloseHandle( m_hFileLogThread );
|
|
m_hFileLogThread = NULL;
|
|
}
|
|
|
|
if( m_hFile != NULL )
|
|
{
|
|
CloseHandle( m_hFile );
|
|
m_hFile = NULL;
|
|
}
|
|
|
|
DeleteCriticalSection(&m_csFileLog);
|
|
m_listFileMsg.clear();
|
|
}
|