/************************************************************************************************** 版本所有(C), 2020-2022, 北京普达迪泰 *************************************************************************************************** 文 件 名: LOG.cpp 功能描述: 日志 版 本 号: 1.00初版 作 者: HYF 生成日期; 2021-12-20 最近修改: 函数列表: 修改历史: 1.日 期 :2021-12-20 作 者 : HYF 修改内容 : 创建文件 **************************************************************************************************/ #include "pch.h" #include "afx.h" #include "Log.h" // 获取应用程序所在路径 创建log文件夹 获取log文件夹路径 CString LOG::CreatLogFolder() { CString m_strFilePath; GetModuleFileName(NULL, m_strFilePath.GetBufferSetLength(MAX_PATH + 1), MAX_PATH); m_strFilePath.ReleaseBuffer(); int m_iPosIndex = m_strFilePath.ReverseFind('\\'); m_strFilePath = m_strFilePath.Left(m_iPosIndex) + "\\Log"; CFileFind m_FileFind; if (!m_FileFind.FindFile(m_strFilePath)) CreateDirectory(m_strFilePath, NULL); return m_strFilePath; } // 获取日志文件名 CString LOG::GetLogFileName() { CString m_strFileName; m_strFileName = CTime::GetCurrentTime().Format("%Y-%m-%d") + ".log"; return m_strFileName; } // 获取当前时间 CString LOG::GetNowTime() { SYSTEMTIME st; CString m_strTime; GetLocalTime(&st); m_strTime.Format("%04d-%02d-%02d %02d:%02d:%02d.%03d", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds); return m_strTime; } ////将日志写进log文件 BOOL LOG::WriteLog(INT LOGLEVEL, CString m_strLogText) { try { // 获取应用程序所在路径 创建log文件夹 获取log文件夹路径 CString m_sLogFolderPath = CreatLogFolder(); // 获取日志文件名 CString m_sLogFileName = GetLogFileName(); // 日志文件路径 CString m_sLogFilePath = m_sLogFolderPath + "\\" + m_sLogFileName; // 文件操作 CStdioFile m_SFile; if (!m_SFile.Open(m_sLogFilePath, CFile::modeReadWrite)) { m_SFile.Open(m_sLogFilePath, CFile::modeCreate | CFile::modeReadWrite | CFile::typeText); } // 获取当前时间 CString m_strTime = GetNowTime(); // 日志 时间 ++ 等级 ++ 内容 CString m_sErrorMessage; // 日志---时间 m_sErrorMessage = "[" + m_strTime + "] "; //日志----等级 switch (LOGLEVEL) { case LOGLEVELDEBUG: m_sErrorMessage += "[ DEBUG ] "; break; case LOGLEVELINFO: m_sErrorMessage += "[ INFO ] "; break; case LOGLEVELWARN: m_sErrorMessage += "[ WARN ] "; break; case LOGLEVELERROR: m_sErrorMessage += "[ ERROR ] "; break; } // 日志----内容 m_sErrorMessage += m_strLogText + "\r\n"; // 写日志文件 m_SFile.SeekToEnd(); char* m_szMessage; m_szMessage = (LPTSTR)(LPCTSTR)m_sErrorMessage; m_SFile.Write(m_szMessage, lstrlen(m_szMessage)); m_SFile.Close(); } catch (CFileException &e) { return false; } return true; } // 调试日志 BOOL LOG::D(CString m_strLogText, ...) { if (g_iDBLogOutput <= 0) return FALSE; char str_tmp[IDPMS_MAX_SIZE]; // 定义一个va_list型的变量,这个变量是指向参数的指针. va_list vArgList; // 用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数 va_start(vArgList, m_strLogText); // 注意,不要漏掉前面的_ _vsnprintf_s(str_tmp, IDPMS_MAX_SIZE, m_strLogText, vArgList); // 用va_end宏结束可变参数的获取 va_end(vArgList); BOOL m_bwritelog = WriteLog(LOGLEVELDEBUG, str_tmp); return m_bwritelog; } // 信息日志 BOOL LOG::I(CString m_strLogText, ...) { char str_tmp[IDPMS_MAX_SIZE]; va_list vArgList; va_start(vArgList, m_strLogText); _vsnprintf_s(str_tmp, IDPMS_MAX_SIZE, m_strLogText, vArgList); va_end(vArgList); BOOL m_bwritelog = WriteLog(LOGLEVELINFO, str_tmp); return m_bwritelog; } // 警告日志 BOOL LOG::W(CString m_strLogText, ...) { char str_tmp[IDPMS_MAX_SIZE]; va_list vArgList; va_start(vArgList, m_strLogText); _vsnprintf_s(str_tmp, IDPMS_MAX_SIZE, m_strLogText, vArgList); va_end(vArgList); BOOL m_bwritelog = WriteLog(LOGLEVELWARN, str_tmp); return m_bwritelog; } // 错误日志 BOOL LOG::E(CString m_strLogText, ...) { char str_tmp[IDPMS_MAX_SIZE]; va_list vArgList; va_start(vArgList, m_strLogText); _vsnprintf_s(str_tmp, IDPMS_MAX_SIZE, m_strLogText, vArgList); va_end(vArgList); BOOL m_bwritelog = WriteLog(LOGLEVELERROR, str_tmp); return m_bwritelog; } // 删除过期日志文件 void LOG::DeleteLog() { //获取应用程序所在路径 创建log文件夹 获取log文件夹路径 CString m_sLogFolderPath = CreatLogFolder(); //日志文件路径 CString strLogFile; strLogFile.Format("%s\\*.log", m_sLogFolderPath); CFileFind finder; BOOL bWorking = finder.FindFile(strLogFile); while (bWorking) { bWorking = finder.FindNextFile(); CTime currentTime = CTime::GetCurrentTime(); CTime timeFile; finder.GetLastAccessTime(timeFile); CTimeSpan ts = currentTime - timeFile; int nSecond = (int)ts.GetTotalSeconds(); if (nSecond > LOGSAVEDAYS * 24 * 60 * 60)//超时,过期 { CString strFile; strFile.Format("%s\\%s", m_sLogFolderPath, finder.GetFileName()); DeleteFile(strFile); } } }