#include "Log.h" #include CLog::CLog() : m_stdout(0), m_stderr(0) { } CLog::~CLog() { if(0 != m_stderr) { fclose(m_stderr); m_stderr = 0; } if(0 != m_stdout) { fclose(m_stdout); m_stdout = 0; } } bool CLog::RedirectStdErr(const char* szFileName) { char szLogFileName[MAX_PATH]; if(MakeFileName(szFileName, szLogFileName)) { m_stderr = freopen(szLogFileName, "at", stderr); return (0 != m_stderr); } return false; } bool CLog::RedirectStdOut(const char *szFileName) { char szLogFileName[MAX_PATH]; if(MakeFileName(szFileName, szLogFileName)) { m_stdout = freopen(szLogFileName, "at", stdout); return (0 != m_stdout); } return false; } bool CLog::MakeFileName(const char* szFileName, char* szLogFileName) { // create log file name in good order for(unsigned long dwSpinCount = 0; TRUE; ++dwSpinCount) { int nLength = _snprintf(szLogFileName, MAX_PATH, "%s%04d.log", szFileName, dwSpinCount); if(nLength < 0) { return false; } if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(szLogFileName)) { break; } else { HANDLE hFile = CreateFile(szLogFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwFileHighSize = 0; DWORD dwFileSize = GetFileSize(hFile, &dwFileHighSize); CloseHandle(hFile); if(0 == dwFileHighSize && dwFileSize < 10 * 1024 * 1024) { break; } } } } return true; }