VC-Logger - 高性能 Windows C++ 日志組件,VC-Logger 是一個簡單易用的 C++ 程序通用日子組件。設(shè)計時著重考慮三個方面:功能、可用性和性能:
功能: 本日志組件的目的是滿足大多數(shù)應(yīng)用程序記錄日志的需求 —— 把日志輸出到文件或發(fā)送到應(yīng)用程序中,并不提供一些復(fù)雜但不常用的功能。
本日志組件的功能包括:
把日志信息輸出到指定文件
每日生成一個日志文件
對于 GUI 程序,可以把日志信息發(fā)送到指定窗口
對于Console應(yīng)用程序,可以把日志信息發(fā)往標(biāo)準(zhǔn)輸出 (std::cout)
支持 MBCS / UNICODE,Console / GUI 程序
支持動態(tài)加載和靜態(tài)加載日志組件 DLL
支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多個日志級別
可用性: 本日志組件著重考慮了可用性,盡量讓使用者用起來覺得簡便、舒心:
簡單純凈:不依賴任何程序庫或框架
使用接口簡單,不需復(fù)雜的配置或設(shè)置工作
提供 CStaticLogger 和 CDynamicLogger 包裝類用于靜態(tài)或動態(tài)加載以及操作日志組件,用戶無 需關(guān)注加載細(xì)節(jié)
程序如果要記錄多個日志文件只需為每個日志文件創(chuàng)建相應(yīng)的 CStaticLogger 或 CDynamicLogger 對象
只需調(diào)用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法記錄日志
日志記錄方法支持可變參數(shù)
日志輸出格式:<時間> <線程ID> <日志級別> <日志內(nèi)容>
性能: 性能是組件是否值得使用的硬指標(biāo),本組件從設(shè)計到編碼的過程都盡量考慮到性能優(yōu)化:
支持多線程同時發(fā)送寫日志請求
使用單獨線程在后臺寫日志,不影響工作線程的正常執(zhí)行
采用批處理方式批量記錄日志
概述:
Module: VC-Logger
Purpose: 記錄程序日志。
1. 把日志信息輸出到指定文件
2. 對于 GUI 程序,可以把日志信息發(fā)送到指定窗口
3. 對于Console應(yīng)用程序,可以把日志信息發(fā)往標(biāo)準(zhǔn)輸出 (std::cout)
Desc:
1、功能:
--------------------------------------------------------------------------------------
a) 把日志信息輸出到指定文件
b) 每日生成一個日志文件
c) 對于 GUI 程序,可以把日志信息發(fā)送到指定窗口
d) 對于Console應(yīng)用程序,可以把日志信息發(fā)往標(biāo)準(zhǔn)輸出 (std::cout)
e) 支持 MBCS / UNICODE,Console / GUI,win32 / x64 程序
f) 支持動態(tài)加載和靜態(tài)加載日志組件 DLL
g) 支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多個日志級別
2、可用性:
--------------------------------------------------------------------------------------
a) 簡單純凈:不依賴任何程序庫或框架
b) 使用接口簡單,不需復(fù)雜的配置或設(shè)置工作
c) 提供 CStaticLogger 和 CDynamicLogger 包裝類用于靜態(tài)或動態(tài)加載以及操作日志組件,用戶無需關(guān)注加載細(xì)節(jié)
d) 程序如果要記錄多個日志文件只需為每個日志文件創(chuàng)建相應(yīng)的 CStaticLogger 或 CDynamicLogger 對象
e) 只需調(diào)用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法記錄日志
f) 日志記錄方法支持可變參數(shù)
g) 日志輸出格式:<時間> <線程ID> <日志級別> <日志內(nèi)容>
3、性能:
--------------------------------------------------------------------------------------
a) 支持多線程同時發(fā)送寫日志請求
b) 使用單獨線程在后臺寫日志,不影響工作線程的正常執(zhí)行
c) 采用批處理方式批量記錄日志
Usage:
方法一:(靜態(tài)加載 Logger DLL)
--------------------------------------------------------------------------------------
0. 應(yīng)用程序包含 StaticLogger.h 頭文件
1. 創(chuàng)建 CStaticLogger 對象(通常為全局對象)
2. 調(diào)用 CStaticLogger->Init(...) 初始化日志組件
3. 使用 CStaticLogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法寫日志
4. 調(diào)用 CStaticLogger->UnInit(...) 清理日志組件(CStaticLogger 對象析構(gòu)時也會自動清理日志組件)
方法二:(動態(tài)加載 Logger DLL)
--------------------------------------------------------------------------------------
0. 應(yīng)用程序包含 DynamicLogger.h 頭文件
1. 創(chuàng)建 CDynamicLogger 對象(通常為全局對象)
2. 調(diào)用 CDynamicLogger->Init(...) 初始化日志組件
3. 使用 CDynamicLogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法寫日志
4. 調(diào)用 CDynamicLogger->UnInit(...) 清理日志組件(CDynamicLogger 對象析構(gòu)時也會自動清理日志組件)
方法三:(直接用導(dǎo)出函數(shù)加載 Logger DLL)
--------------------------------------------------------------------------------------
0. 應(yīng)用程序包含 Logger.h 頭文件
1. 手工調(diào)用 ILoger_Create() 和 ILoger_Create() 導(dǎo)出函數(shù)創(chuàng)建和銷毀 ILogger 對象
(注:如果是動態(tài)加載,需手工調(diào)用 ::LoadLibrary()/::FreeLibrary() 系列 API 函數(shù)加載和卸載 Logger DLL)
[
***** 對于希望通過窗口接收日志信息的 GUI 程序 *****
A. 日志組件初始化成功后調(diào)用 SetGUIWindow(HWND) 設(shè)置收日志的窗口
B. 窗口須響應(yīng)處理 LOG_MESSAGE 消息
C. 處理完 LOG_MESSAGE 消息后,調(diào)用 ILogger::FreeLogMsg() 銷毀接收到的 TLogMsg
]
Environment:
1. Windows 2000 or later (_WIN32_WINNT >= 0x0500)
2. VC++ 2010 or later
Release:
1. Logger_C.dll - Console/MBCS/Release
2. Logger_CD.dll - Console/MBCS/Debug
3. Logger_CU.dll - Console/Unicode/Release
4. Logger_CUD.dll - Console/Unicode/Debug
5. Logger.dll - GUI/MBCS/Release
6. Logger_D.dll - GUI/MBCS/Debug
7. Logger_U.dll - GUI/Unicode/Release
8. Logger_UD.dll - GUI/Unicode/Debug
Examples:
1. TestGUILogger - GUI 版測試程序 (靜態(tài)加載)
2. TestDynamicLogger - GUI 版測試程序 (動態(tài)加載)
3. TestConsoleLogger - Console 版測試程序 (靜態(tài)加載)