#include "StdAfx.h" #include "LogMgr.h" #include "MainFrm.h" #include "FileMgr.h" #include "Propertie.h" #include "PropertieMgr.h" #include "BitOperation.h" #include "AuthorityMgr.h" #include "WorkTime.h" #include "CStringFuc.h" #include "CriticalSection.h" #include "GlobalFunction.h" #include "MyDlgView.h" #include "DlgChildEventLog.h" #define LOG_FILE_PATH _T("\\LogFile_DataMgr\\") #define WNDS_NAME_LaipuLog "Laipu Log" #define FILE_Name_LaipuLog ("\\LogMgrDlg.exe") CLogMgr* gLogMgr = NULL;//日志管理对象 CLogMgr::CLogMgr(void) { m_bWriteDebugLog = true; m_LogListMaxLine = 1000;//日志列表最大的行数,超过时清空 m_bWriteToLogList = true;//输出到日志列表 m_pPromptInfo = NULL;//提示信息 m_bNotWriteSameLog = true;//不要显示连续相同的日志 m_MaxWorkRecodCnt = 100;//最大加工记录的查询数量,避免数量过大卡死 } CLogMgr::~CLogMgr(void) { } #if 1 void CLogMgr::OnAppInitialize() { //创建日志文件的默认路径 CreatLogFilePath(); //更新LogFileStream UpdateLogFileStream(); } CMFCPropertyGridProperty *CLogMgr::CreatGridProperty() { CString PropertyName;//属性名称 CString Description;//描述 CString Path = _T("LogMgr");;//存储路径 CString Name; CString GroupName; CString ModuleName; //-------------------------------------------------------------------------------// PropertyName = _T("日志"); GroupName = PropertyName; CMFCPropertyGridProperty* pGroup = new CMFCPropertyGridProperty(PropertyName); //-------------------------------------------------------------------------------// if(gAuthorityMgr->CheckAuthority(_Authority_Engineer)) { //添加属性变量映射 Name = _T("bWriteDebugLog");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_bWriteDebugLog); pPropertie->SetType(_PROP_TYPE_BOOL); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("日志文件"); Description = _T("是否输出调试日志文件"); pPropertie->SetGroupName(GroupName); pPropertie->SetShowName(PropertyName); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bWriteDebugLog, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } if(gAuthorityMgr->CheckAuthority(_Authority_Engineer)) { //添加属性变量映射 Name = _T("m_bWriteToLogList");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_bWriteToLogList); pPropertie->SetType(_PROP_TYPE_BOOL); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("日志列表"); Description = _T("是否输出日志列表"); pPropertie->SetGroupName(GroupName); pPropertie->SetShowName(PropertyName); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bWriteToLogList, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } if(gAuthorityMgr->CheckAuthority(_Authority_Engineer)) { //添加属性变量映射 Name = _T("m_bNotWriteSameLog");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_bNotWriteSameLog); pPropertie->SetType(_PROP_TYPE_BOOL); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("屏蔽相同日志"); Description = _T("是否屏蔽相同日志"); pPropertie->SetGroupName(GroupName); pPropertie->SetShowName(PropertyName); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_bNotWriteSameLog, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } if(gAuthorityMgr->CheckAuthority(_Authority_Factory)) { //添加属性变量映射 Name = _T("m_LogListMaxLine");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_LogListMaxLine); pPropertie->SetType(_PROP_TYPE_INT); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("最大行数"); Description = _T("日志列表最大的行数,超过时清空日志列表"); pPropertie->SetGroupName(GroupName); pPropertie->SetShowName(PropertyName); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_LogListMaxLine, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } if(gAuthorityMgr->CheckAuthority(_Authority_Factory)) { //添加属性变量映射 Name = _T("m_MaxWorkRecodCnt");//变量名字 CPropertie *pPropertie = new CPropertie; pPropertie->SetpVal((void*)&m_MaxWorkRecodCnt); pPropertie->SetType(_PROP_TYPE_INT); pPropertie->SetpModule(this); pPropertie->SetPath(Path); pPropertie->SetName(Name); pPropertie->WriteRead(true);//读取保存的属性 //添加属性显示 PropertyName = _T("查询记录数量"); Description = _T("最大查询加工记录的数量,避免数量过大卡死"); pPropertie->SetGroupName(GroupName); pPropertie->SetShowName(PropertyName); CMFCPropertyGridProperty* p1 = new CMFCPropertyGridProperty(PropertyName, (_variant_t)m_MaxWorkRecodCnt, Description); pGroup->AddSubItem(p1); gDevicePropertieMgr.Insert(p1, pPropertie); } //-------------------------------------------------------------------------------// return pGroup; } //创建日志文件的默认路径 void CLogMgr::CreatLogFilePath() { CString DirPath = GetLogPath(); CFileMgr FileMgr; if(!FileMgr.IsDirectoryExists(DirPath)) FileMgr.CreatDir(DirPath); } //更新LogFileStream void CLogMgr::UpdateLogFileStream() { CWorkTime WorkTime; CString Date = WorkTime.GetCurDate("_"); //日期或者指定路径发生变化时 CString NewLogFilePath = GetLogFilePath(); if(m_CurDebugLogFilePath != NewLogFilePath) { CString LogFilePath = NewLogFilePath; //关闭之前的 m_LogFileStream.close(); //以追加的方式打开 m_LogFileStream.open(LogFilePath, ios::app); m_CurDebugLogFilePath = NewLogFilePath; WriteDebugLog("Func---->UpdateLogFileStream"); WriteDebugLog(LogFilePath); } } CString CLogMgr::GetLogPath() { CString DirPath = gProgramLaserTuiHuo->GetLaipuLaserDataDir(LOG_FILE_PATH); return DirPath; } CString CLogMgr::GetLogFilePath() { CFileMgr FileMgr; CString LogFilePath = GetLogPath(); //创建当前年的文件夹 CWorkTime WorkTime; LogFilePath += WorkTime.GetCurYear(); if(!FileMgr.IsDirectoryExists(LogFilePath)) { FileMgr.CreatDir(LogFilePath); } //创建当前月的文件夹 LogFilePath += "\\"; LogFilePath += WorkTime.GetCurMonth(); if(!FileMgr.IsDirectoryExists(LogFilePath)) { FileMgr.CreatDir(LogFilePath); } //加上当前的日期 LogFilePath += "\\"; CString Date = WorkTime.GetCurDate("_"); LogFilePath += Date; //如果路径不存在则创建目录(每天的目录) if(!FileMgr.IsDirectoryExists(LogFilePath)) { FileMgr.CreatDir(LogFilePath); } CString CurTime = WorkTime.GetCurTime("_"); LogFilePath += "\\log_"; LogFilePath += CurTime.Left(2);//每个小时为一个文件 LogFilePath += ".txt"; return LogFilePath; } //打开日志目录 void CLogMgr::OpenLogFileDir() { gLogMgr->WriteDebugLog("Func---->OpenLogFileDir"); if(gAuthorityMgr->CheckAuthority(_Authority_Engineer,true)==false) return; CString DirPath = GetLogPath(); CFileMgr FileMgr; FileMgr.OpenDir(DirPath); } #endif #if 1 //写入日志 void CLogMgr::WriteLog(CLog &Log) { if(gExitApp) return; //不要重复输入相同的日志信息 if(m_bNotWriteSameLog) { if(m_LastLogStr == Log.str) return; } m_LastLogStr = Log.str; CString strTime; //当前时间 strTime=gWorkTime.GetDateTime("/",":"); //输出当前线程ID CString ThreadId; ThreadId.Format("<%ld>",GetCurrentThreadId()); CString str = strTime + ThreadId; str = str + " "+Log.str; CDlgChildEventLog *pDlgChild = dynamic_cast(gChildEventLog); pDlgChild->InsertLogToList(str,_LogListType_LaipuDrawing); //写入到log 文件 if(m_bWriteDebugLog) { m_LogFileStream<AddToList(Str,m_LogListMaxLine); } CString CLogMgr::GetLastLogStr() { CString s; return s; } //打开log app void CLogMgr::OpenLogListApp() { } void CLogMgr::OpenLogListAppExt() { } #endif #if 1//一些方便的写log 方式 void CLogMgr::WriteDebugLog(CString Str,LOG_TYPE type) { //过滤掉太短的日志 if(Str.GetLength()<3) return; if(m_bWriteDebugLog) { CLog log; log.AddDebugLog(); switch(type) { case _LOG_ERROR: Str = "[Error]"+Str; break; case _LOG_FUNC: Str = "[Function]"+Str; break; default: break; } CString str1 = Str; log.str = str1; WriteLog(log); } } //两个变量 void CLogMgr::WriteDebugLog(CString Str,CString ValName1,CString ValName2,double val1,double val2) { } //一个变量 void CLogMgr::WriteDebugLog(CString Str,CString ValName,double val) { } void CLogMgr::WriteByte(BYTE bit) { } void CLogMgr::WriteBuf(char *buf,int len) { } #endif