#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);
|
|
TCHAR szPath[MAX_PATH] = { 0 };
|
GetModuleFileName(NULL, szPath, MAX_PATH);
|
|
CString strPath = szPath;
|
int pos = strPath.ReverseFind('\\');
|
if (pos != -1) {
|
strPath = strPath.Left(pos + 1);
|
}
|
|
CTime now = CTime::GetCurrentTime();
|
CString strLogDir = strPath + _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 | CFile::shareDenyWrite)) {
|
|
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();
|
}
|
}
|