以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 通用的应用程序高级日志系统 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=85892) |
-- 作者:卷积内核 -- 发布时间:7/27/2010 2:18:00 PM -- 通用的应用程序高级日志系统 日志模块 本文介绍的日志系统包括七个 C++ 类:CLog, CFuncLog, IStoreLog, CWinLog, CFileLog, CAutoCritic, CLogSimpleLock。CLog 是所有日志模块中最主要的一个类,在大多数情况下,这个类在应用程序中最好是单实例的。但并不是必须的。重要性其次的一个类是 CFuncLog,这个类用于对函数调用的进入和退出进行记录。当然开发人员也可以使用这个类对任何数据进行日志记录。该类重载了 << 操作符,所以使用很方便。 下图是本文介绍的日志系统使用截图 日志模块的 UML 设计 从下图可以看到,日志模块类可以分成两个部分: 图一 UML 设计的类继承图 存储类: ///////////////////////////////////////////////////////// 日志类 这一部分我们要讨论两个类:CLog 和 CFuncLog。CLog 在 clog.h 中声明,实现文件是 clog.cpp,CFunLog 在 cfunlog.h 声明,实现文件是 cfunlog.cpp。 #define DEF_TIME_LONG_STR "%02u:%02u:%02u ms:%03u" CLog 还能具备如下的属性: 信息输出格式属性——SetMessageFormat 和 GetMessageFormat 函数; 在 CLog 类中有三个日志记录函数: LogRawString —— 跟踪记录原始串,不需要格式化存储; std::string 大多数情况下,开发人员如果需要超过三种类型以上的信息,可以实现 CLog 提供的一个虚拟函数 LevelText,在参数中提供一个表示日志级别 LEVEL 的数字。函数将用串形式返回一个类型名。默认情况下,一种类型规定的格式符号限制是12种,但可以用 SetMessageFormat 函数修改格式模板串。 如果要在应用程序中使用日志机制,请在工程中包含下列头文件: #include "clog.h" 注意:CWinLog 类存储跟踪窗口中的信息,它不是多进程安全的。但多进程的日志可以使用 CFileLog 类。它将所有跟踪信息存储到文件。所有文件的操作通过操作系统进行同步。 如何使用日志模块 1、创建 CLog 类实例: CLog *m_pLog = new CLog( new CFileLog( "c:\\log.log" ), LOG_MAX_LEVEL, true ); CRepTestApp::CRepTestApp() int something = 100; 使用 CFuncLog 类的 LogString 可以很容易添加需要的信息到日志中。 如果你想要将存储到其它地方,那么必须自己实现 IStoreLog 类,并用其实例作为某个构造函数的参数。CAutoCritic 和 CLogSimpleLock 类是对 Windows 临界区 API 的封装。这个类是在单独的文件中实现的,并在名字空间 LOGGER 中使用。你可以通过其它的 IStoreLog 类灵活使用。 [URL=http://www.vckbase.com/code/downcode.asp?id=3179]源代码下载[/URL] |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
31.250ms |