| | |
| | | |
| | | CLogger& CLogger::Instance() |
| | | { |
| | | static CLogger instance; |
| | | return instance; |
| | | static CLogger instance; |
| | | return instance; |
| | | } |
| | | |
| | | CLogger::CLogger() |
| | |
| | | |
| | | CLogger::~CLogger() |
| | | { |
| | | CloseLogFile(); |
| | | CloseLogFile(); |
| | | } |
| | | |
| | | void CLogger::OpenLogFile() |
| | | { |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | |
| | | CTime now = CTime::GetCurrentTime(); |
| | | CString strLogDir = _T("Log"); |
| | | CTime now = CTime::GetCurrentTime(); |
| | | CString strLogDir = _T("Log"); |
| | | |
| | | if (!PathFileExists(strLogDir)) { |
| | | CreateDirectory(strLogDir, NULL); |
| | | } |
| | | if (!PathFileExists(strLogDir)) { |
| | | CreateDirectory(strLogDir, NULL); |
| | | } |
| | | |
| | | CString strNewPath; |
| | | strNewPath.Format(_T("%s\\SG_%04d%02d%02d.log"), strLogDir, now.GetYear(), now.GetMonth(), now.GetDay()); |
| | | CString strNewPath; |
| | | strNewPath.Format(_T("%s\\SG_%04d%02d%02d.log"), strLogDir, now.GetYear(), now.GetMonth(), now.GetDay()); |
| | | |
| | | if (m_strCurrentLogPath.CompareNoCase(strNewPath) != 0 || m_logFile.m_pStream == nullptr) { |
| | | if (m_logFile.m_pStream) { |
| | | m_logFile.Flush(); |
| | | m_logFile.Close(); |
| | | } |
| | | if (m_strCurrentLogPath.CompareNoCase(strNewPath) != 0 || m_logFile.m_pStream == nullptr) { |
| | | if (m_logFile.m_pStream) { |
| | | m_logFile.Flush(); |
| | | m_logFile.Close(); |
| | | } |
| | | |
| | | if (m_logFile.Open(strNewPath, |
| | | CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeBinary)) { |
| | | if (m_logFile.Open(strNewPath, |
| | | CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeBinary)) { |
| | | |
| | | if (m_logFile.GetLength() == 0) { |
| | | WCHAR bom = 0xFEFF; |
| | | m_logFile.Write(&bom, sizeof(WCHAR)); |
| | | } |
| | | if (m_logFile.GetLength() == 0) { |
| | | WCHAR bom = 0xFEFF; |
| | | m_logFile.Write(&bom, sizeof(WCHAR)); |
| | | } |
| | | |
| | | m_logFile.SeekToEnd(); |
| | | m_strCurrentLogPath = strNewPath; |
| | | } |
| | | } |
| | | m_logFile.SeekToEnd(); |
| | | m_strCurrentLogPath = strNewPath; |
| | | } |
| | | } |
| | | } |
| | | |
| | | void CLogger::WriteLine(CString str) |
| | | { |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | |
| | | OpenLogFile(); |
| | | OpenLogFile(); |
| | | |
| | | if (m_logFile.m_pStream) { |
| | | CTime now = CTime::GetCurrentTime(); |
| | | CString strTime; |
| | | strTime.Format(_T("[%02d:%02d:%02d]"), now.GetHour(), now.GetMinute(), now.GetSecond()); |
| | | if (m_logFile.m_pStream) { |
| | | CTime now = CTime::GetCurrentTime(); |
| | | CString strTime; |
| | | strTime.Format(_T("[%02d:%02d:%02d]"), now.GetHour(), now.GetMinute(), now.GetSecond()); |
| | | |
| | | CString strLine = strTime + str + _T("\r\n"); |
| | | m_logFile.Write((LPCTSTR)strLine, strLine.GetLength() * sizeof(WCHAR)); |
| | | } |
| | | CString strLine = strTime + str + _T("\r\n"); |
| | | m_logFile.Write((LPCTSTR)strLine, strLine.GetLength() * sizeof(WCHAR)); |
| | | } |
| | | } |
| | | |
| | | void CLogger::CloseLogFile() |
| | | { |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | CSingleLock lock(&m_csLogLock, TRUE); |
| | | |
| | | if (m_logFile.m_pStream) { |
| | | m_logFile.Flush(); |
| | | m_logFile.Close(); |
| | | m_strCurrentLogPath.Empty(); |
| | | } |
| | | if (m_logFile.m_pStream) { |
| | | m_logFile.Flush(); |
| | | m_logFile.Close(); |
| | | m_strCurrentLogPath.Empty(); |
| | | } |
| | | } |