213 virtual LPCTSTR GetLogFile() const = 0; // 日志文件
214 virtual ErrorCode GetLastError() const = 0; // 当前操作错误码
215
216 /****************************** GUI ******************************/
217 #ifdef _WINDOWS
218 public:
219 // 设置接收日志信息的窗口, hWndGUI == NULL 则取消接收
220 virtual void SetGUIWindow(HWND hWndGUI) = 0;
221 // 获取接收日志信息的窗口
222 virtual HWND GetGUIWindow() = 0;
223
224 // 销毁在发送 LOG_MESSAGE 消息时动态创建的 TLogMsg 对象
225 virtual void FreeLogMsg(const TLogMsg* pLogMsg);
226
227 // 虚拟窗口句柄标掩码:用于向 GUI 窗口发送 LOG_MESSAGE 消息时作为发送源标识
228 static const int LOGGER_FAKE_WINDOW_BASE = 0X80001111;
229 // 自定义日志消息:通过本消息向 GUI 窗口发送日志
230 // 其中:WPARAM -> ILogger 对象指针,LPARAM -> TLogMsg 结构体指针
231 static const int LOG_MESSAGE = WM_USER | (0x7FFF & LOGGER_FAKE_WINDOW_BASE);
232 #endif
233
234 public:
235 static const int PRINT_FLAG_FILE = 0x00000001; // 打印到文件
236 static const int PRINT_FLAG_SCREEN = 0x00000002; // 打印到屏幕
237 static const int DEFAULT_PRINT_FLAG = PRINT_FLAG_FILE; // 默认日志掩码
238 static const LogLevel DEFAULT_LOG_LEVEL =
239 #ifdef _DEBUG
240 LL_DEBUG
241 #else
242 LL_INFO
243 #endif
244 ;
245 };
246
247 /**************************************************/
248 /************** Logger DLL 导出函数 ***************/
249
250 // 创建 ILogger 对象
251 EXTERN_C LOGGER_API ILogger* ILogger_Create();
252 // 销毁 ILogger 对象
253 EXTERN_C LOGGER_API void ILogger_Destroy(ILogger* p);
254
255 // 获取各日志级别的文字描述
256 EXTERN_C LOGGER_API LPCTSTR ILogger_GetLogLevelDesc (ILogger::LogLevel ll);
257 // 获取各操作错误码的文字描述
258 EXTERN_C LOGGER_API LPCTSTR ILogger_GetErrorDesc (ILogger::ErrorCode ec);
代码中的注释基本已经能够说明日志组件的使用方法,这里只做一些简单的概括:
版本:日志组件以 DLL 的形式提供,已编译成 Debug/Release、MBCS/Unicode、GUI/Console 8个版本
测试:三个测试程序 TestGUILogger、TestDynamicLogger 和 TestConsoleLogger 用于测试所有版本。其中 TestDynamicLogger 采用动态加载方式加载 Logger DLL
使用方法:
0. 应用程序包含 Logger.h 头文件
1. 调用 ILogger_Create() 导出函数创建 ILogger 对象
2. 调用 ILogger->Init(...) 初始化日志组件
3. 使用 ILogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法写日志
4. 调用 ILogger->UnInit(...) 清理日志组件
5. 调用 ILogger_Destroy() 导出函数销毁 ILogger 对象
2、CStaticLogger:ILogger 包装器(智能指针)—— 用于静态加载 Logger DLL
1 #pragma once
2
3 #include "Logger.h"
4
5 /**************************************************/
6 /********* www.2cto.com *********/
7 /********** ILogger 包装器(智能指针) ***********/
8 /*********** 用于静态加载 Logger DLL ************/
9
10 class LOGGER_API CStaticLogger
11 {
12 public:
13 // 构造函数:如果 bCreate 为 TRUE,则在构建 CStaticLogger 实例的同时创建 ILogger 对象
14 CStaticLogger(BOOL bCreate = TRUE);
15 // 析构函数
16 ~CStaticLogger();
17 private:
18 CStaticLogger(const CStaticLogger&);
19 CStaticLogger& operator = (const CStaticLogger&);
20
21 public:
22 inline void Reset (ILogger* pLogger); // 重设其封装的 ILogger 指针
23 inline BOOL IsValid () const; // 判断其封装的 ILogger 指针是否非空
24 inline ILogger* Get () const; // 获取 ILogger 指针
25 inline ILogger& operator * () const; // 获取 ILogger 引用
26 inline ILogger* operator -> () const; // 获取 ILo