您的位置:首页 > 编程语言 > C语言/C++

C++内存日志系统(一)

2010-07-03 12:40 330 查看
在游戏的开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况。
而在产品发布的时候,前台大都会把日志系统关掉或者采用加密的日志的记录高级别的运行信息(一些运行异常等)。
开启日志后,就需要考虑一个维护策略,比如多久删除一次,何时写入文件,日志文件限制多大,怎么分割等。
综合考虑如下几点:
1。必须尽可能的快,不影响性能
2。必须限制大小
3。必须是线程安全的
4。必须能够具备加解密接口
5。必须能够分模块记录日志
6。必须动态可调日志级别

考虑到上面的各种需求,设计一个按线程和模块独立记录,位于内存的循环日志.

日志系统,最终的记录员是模块,所以执行记录操作的泪是------- 模块日志buff,
定位到当前线程的相应模块,需要一个管理者,这个管理者是----- 线程日志buff,
定位到当前需要调用的线程buffer,当然是日志系统了----------- 内存日志系统IMemLogSys

需求当中的 1. 2. 由 模块日志buff(IModuleBuffer)完成
需求当中的 3. 4. 6. 由 内存日志系统(IMemLogSys)完成
需求当中的 5. 由 线程日志buff(IThreadBuffer)完成

所以把需求分解后,后面需求的变更都是由相应的类来负责,做到职责单一。

(上面为了限制大小,其实需要定义一个预设值,最大线程数,最大模块数)

上面的分析,大概是系统接口设计如下:

在游戏的开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况。而在产品发布的时候,前台大都会把日志系统关掉或者采用加密的日志的记录高级别的运行信息(一些运行异常等)。开启日志后,就需要考虑一个维护策略,比如多久删除一次,何时写入文件,日志文件限制多大,怎么分割等。

综合考虑如下几点:

1。必须尽可能的快,不影响性能

2。必须限制大小

3。必须是线程安全的

4。必须能够具备加解密接口

5。必须能够分模块记录日志

6。必须动态可调日志级别 考虑到上面的各种需求,

设计一个按线程和模块独立记录,位于内存的循环日志.
日志系统,最终的记录员是模块,所以

执行记录操作的泪是------- 模块日志buff,

定位到当前线程的相应模块,需要一个管理者,

这个管理者是----- 线程日志buff,

定位到当前需要调用的线程buffer,

当然是日志系统了----------- 内存日志系统IMemLogSys

需求当中的 1. 2. 由 模块日志buff(IModuleBuffer)完成

需求当中的 3. 4. 6. 由 内存日志系统(IMemLogSys)完成

需求当中的 5. 由 线程日志buff(IThreadBuffer)完成

所以把需求分解后,后面需求的变更都是由相应的类来负责,做到职责单一。
(上面为了限制大小,其实需要定义一个预设值,最大线程数,最大模块数)
上面的分析,大概是系统接口设计如下:

	virtual void RegisterEncryption(pfn_Encryption pfnEncryFunc);							//注册加解密
virtual void RegisterLogLevel(E_IMEMLOGSYS_LEVEL eLevel);								//设置日志级别
};


Sign Clown 2010.7.3 . 12:39 . HYPD
[本文原创,转载请注明出处,在文章末尾提供原文链接http://www.cnblogs.com/JefferyZhou/,否则一旦发现,将按字节每人民币收费,绝不论价]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: