#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(); }