#ifndef _LOGFILE_H_ #define _LOGFILE_H_ #include <io.h> #include <time.h> #include <list> #include <process.h> #include <Windows.h> /*****************************************************************************/ /* 日志相关定义 */ /*****************************************************************************/ #define _LOG_MUTEX_WAIT_ 5000 // 日志处理过程中的互斥等待时间(毫秒) #define _LOG_STOP_EVENT_WAIT_ 50 // 停止日志处理信号的等待时间(毫秒) #define _LOG_THREAD_CYCLE_TIME_ 1000 // 日志处理线程的处理周期(毫秒) #define _LOG_RECORS_SIZE_ 5120 // 一条日志的长度(字节) #define _LOG_NAME_LEN_ 256 // 日志文件名长度(字节) #define _LOG_FIX_LEN_ 16 // 日志前缀长度(字节) #define _LOG_POSTFIX_ ".log" // 日志默认后缀 /*日志运行模式*/ typedef enum emLogMode { elmDefault = 0x0, // 程序运行周期只生成一个文件 elmEveryDay = 0x1, // 每天一个日志文件 }EMLOGMODE; /*日志模式*/ typedef struct tagLogMode { emLogMode m_logMode; int m_iValue; }LOGMODE, *LPLOGMODE; /*一条日志记录*/ typedef struct tagLogRecord { int m_nSize; char m_szLog[_LOG_RECORS_SIZE_]; }LOGRECORD, *LPLOGRECORD; /*日志记录类*/ class CLogFile { public: CLogFile(); ~CLogFile(); public: /** * 设置日志文件参数 * @param strLogCatalog [in] 日志文件存放的目录 * @param strLogPrefix [in] 日志文件名称的前缀 * @param strLogPostfix [in] 日志文件名称的后缀(扩展名) */ void SetLogParam( const char* pszDir, const char* pszPrefix, const char* pszPostfix ); /** * 设置日志模式 * @param elmLog [in] 日志模式 * @param iValue [in] 相关值 */ void SetLogMode( emLogMode elmLog, int iValue = -1 ); /** * 启动日志文件管理 */ bool OnRun(); /** * 终止日志文件管理 */ void OnStop(); /** * 增加日志内容(只适合单线程) * @param rowFormat [in] 行的缩进控制 * @param strLogText [in] 日志内容(末尾不必加换行符) */ void AddLogText( const char * pArg,... ); private: /** * 导航线程回调函数 * @param pParam [in] 线程参数 * @return 线程执行结果 */ static unsigned long __stdcall LogFileManProc( void* pParam ); /** * 将日志记录写入日志文件 * @param logRecord [in] 日志记录 * @return 线程执行结果 */ void WriteLogRecord( const LOGRECORD& logRecord ); /** * 获取日志文件名 */ bool GetLogName(); /** * 检查日志模式 */ void CheckLogMode(); /** * 获取日志版本,用于日志模式判断 * @return 日志版本(格式:YYYYMMDD,eg:20101227) */ long GetLogVersion(); private: char m_szLogDir[_LOG_NAME_LEN_]; // 日志文件存放的目录 char m_szLogName[_LOG_NAME_LEN_]; // 日志文件的名称 char m_szLogPrefix[_LOG_FIX_LEN_]; // 日志文件名称的前缀 char m_szLogPostfix[_LOG_FIX_LEN_]; // 日志文件名称的后缀(扩展名) std::list<LOGRECORD> m_listLogRecord; // 日志记录链表 FILE *m_pLogFile; // 日志文件 HANDLE m_threadLog; // 日志处理线程 DWORD m_dwThreadID; // 日志线程ID HANDLE m_eventStop; // 日志停止事件 HANDLE m_mutexLog; // 日志互斥对象 HANDLE m_mutexFile; // 文件读写互斥对象 LOGMODE m_logMode; // 日志生成模式 long m_lLogVersion; // 日志版本 }; #endif