高机能 Windows C++ 通用组件 VC-Logger v2.0.3 正式公布

    添加时间:2013-6-16 点击量:


      VC-Logger 是一个简单易用的 C++ 法度通用日子组件。设计时侧重推敲三个方面:功能、可用性和机能。为了让大师能更便利的进修 VC-Logger,特此精心建造了几个测试用例:TestGUILogger(GUI 版本测试用例 / 静态加载)、TestDynamicLogger(GUI 版本测试用例 / 动态加载)、TestConsoleLogger(Console 版本测试用例 / 静态加载)。?


      (项目主页:http://www.jessma.org,地址:http://www.oschina.net/p/vc-logger)


      功能: 本日记组件的目标是满足大多半应用法度记录日记的需求 —— 把日记输出到文件或发送到应用法度中,并不供给一些错杂但不常用的功能。本日记组件的功能包含:



    1. 把日记信息输出到指定文件

    2. 每日生成一个日记文件

    3. 对于 GUI 法度,可以把日记信息发送到指定窗口

    4. 对于Console应用法度,可以把日记信息发往标准输出 (std::cout)

    5. 支撑 MBCS / UNICODE,Console / GUI 法度

    6. 支撑动态加载和静态加载日记组件 DLL

    7. 支撑 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多个日记级别


      可用性: 本日记组件侧重推敲了可用性,尽量让应用者用起来感觉简便、舒心:



    1. 简纯真净:不依附任何法度库或框架

    2. 应用接口简单,不需错杂的设备或设置工作

    3. 供给 CStaticLogger 和 CDynamicLogger 包装类用于静态或动态加载以及操纵日记组件,用户无 需存眷加载细节

    4. 法度若是要记录多个日记文件只需为每个日记文件创建响应的 CStaticLogger 或 CDynamicLogger 对象

    5. 只需调用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等办法记录日记

    6. 日记记录办法支撑可变参数

    7. 日记输出格局:<时候> <线程ID> <日记级别> <日记内容>


      机能: 机能是组件是否值得应用的硬指标,本组件从设计到编码的过程都尽量推敲到机能优化:



    1. 支撑多线程同时发送写日记恳求

    2. 应用零丁线程在后台写日记,不影响工作线程的正常履行

    3. 采取批处理惩罚体式格式批量记录日记


    应用办法
    办法一:(静态加载 Logger DLL)
    --------------------------------------------------------------------------------------



    1. 应用法度包含 StaticLogger.h 头文件

    2. 创建 CStaticLogger 对象(凡是为全局对象)

    3. 调用 CStaticLogger->Init(...) 初始化日记组件

    4. 应用 CStaticLogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等办法写日记

    5. 调用 CStaticLogger->UnInit(...) 清理日记组件(CStaticLogger 对象析构时也会主动清理日记组件)


















    办法二:(动态加载 Logger DLL)
    --------------------------------------------------------------------------------------



    1. 应用法度包含 DynamicLogger.h 头文件

    2. 创建 CDynamicLogger 对象(凡是为全局对象)

    3. 调用 CDynamicLogger->Init(...) 初始化日记组件

    4. 应用 CDynamicLogger->Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等办法写日记

    5. 调用 CDynamicLogger->UnInit(...) 清理日记组件(CDynamicLogger 对象析构时也会主动清理日记组件)


















    办法三:(直接用导出函数加载 Logger DLL)
    --------------------------------------------------------------------------------------



    1. 应用法度包含 Logger.h 头文件

    2. 手工调用 ILoger_Create() 和 ILoger_Create() 导出函数创建和烧毁 ILogger 对象 


















        (注:若是是动态加载,需手工调用 ::LoadLibrary()/::FreeLibrary() 系列 API 函数加载和卸载 Logger DLL)

        [
                 对于经由过程窗口接管日记信息的 GUI 法度
            A. 日记组件初始化成功后调用 SetGUIWindow(HWND) 设置收日记的窗口
            B. 窗口须响应处理惩罚 LOG_MESSAGE 消息
            C. 处理惩罚完 LOG_MESSAGE 消息后,调用 ILogger::FreeLogMsg() 烧毁接管到的 TLogMsg 
        ]

    Environment:



    1. Windows 2000 or later (_WIN32_WINNT >= 0 x0500)

    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 版测试法度               (静态加载)

    2. TestDynamicLogger - GUI 版测试法度         (动态加载)

    3. TestConsoleLogger - Console 版测试法度    (静态加载)














    相干博文:《Windows C++ 应用法度通用日记组件(组件及测试法度)》


      众所周知,在调试、跟踪和履行应用法度的过程中,法度的日记能为这些工作供给多量有价值的运行信息。是以,法度的日记对应用法度的运行、保护至关首要。


      在如何记录法度日记方面,凡是有三种选择:


      1、采取Log4CXX等公共开源日记组件:这类日记组件的特点是跨平台且功能斗劲强大,例如可以把日记发往另一台办事器或记录到数据库中等;别的,可设备性较高,可以经由过程设备文件或法度代码对日记进行很多个性化设置。但从别的一个角度看,因为这些长处往往也导致了在应用方面的毛病。起首,对于一般应用法度来说,它们并不须要太多的功能,凡是只须要把日记记录到文件或反馈到应用法度,功能太多反正让用户应用起来感觉繁琐还得背负很多从来都用不到的代码。其次,这类日记组件凡是是跨平台的,并不只是针对 Windows 或 VC 的应用法度,是以应用起来总会感觉有点别扭,例如他们的字符都是用 char 类型的,对于一个 Unicode 法度来说每次写日记都要做字符转换是很不爽的工作,本座在多年前曾经应用过 Log4Cpp ,法度履行时老是呈报日记组件有内存泄漏,固然有可能是误报,然则应用起来总感觉很不舒畅。


      2、本身写几个简单的类或函数记录日记:这种办法的确很简单,凡是都不消一两百行的代码。但这种办法凡是缺乏规范性和通用性,其他法度须要记录类似的但有点差别的日记时,凡是的作法是:Copy-Paste-Modify;别的,这类办法很可能也没有推敲机能或并发方面的题目,凡是是直接在工作线程中写日记,对于那些机能请求较高的应用法度是绝对不容许的。


      3、干脆不记录任何日记:的确,如今很多法度因为各类原因并没有记录任何日记。但本座认为,若是一个法度是有效的,具备必然功能,并且须要连气儿运行较长一段时候,那么记录日记是必须的;不然,得卖力推敲该法度是否有存在的须要了。



    CodeProject

    我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
    分享到: