#include "pch.h" #include "Logger.h" CLogger& CLogger::Instance() { static CLogger instance; return instance; } CLogger::CLogger() { OpenLogFile(); } CLogger::~CLogger() { CloseLogFile(); } void CLogger::OpenLogFile() { CSingleLock lock(&m_csLogLock, TRUE); CTime now = CTime::GetCurrentTime(); CString strLogDir = _T("Log"); if (!PathFileExists(strLogDir)) { CreateDirectory(strLogDir, NULL); } 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_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)); } m_logFile.SeekToEnd(); m_strCurrentLogPath = strNewPath; } } } void CLogger::WriteLine(CString str) { CSingleLock lock(&m_csLogLock, TRUE); OpenLogFile(); 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)); } } void CLogger::CloseLogFile() { CSingleLock lock(&m_csLogLock, TRUE); if (m_logFile.m_pStream) { m_logFile.Flush(); m_logFile.Close(); m_strCurrentLogPath.Empty(); } }