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)完成
所以把需求分解后,后面需求的变更都是由相应的类来负责,做到职责单一。
(上面为了限制大小,其实需要定义一个预设值,最大线程数,最大模块数)
上面的分析,大概是系统接口设计如下:
Sign Clown 2010.7.3 . 12:39 . HYPD
[本文原创,转载请注明出处,在文章末尾提供原文链接http://www.cnblogs.com/JefferyZhou/,否则一旦发现,将按字节每人民币收费,绝不论价]
而在产品发布的时候,前台大都会把日志系统关掉或者采用加密的日志的记录高级别的运行信息(一些运行异常等)。
开启日志后,就需要考虑一个维护策略,比如多久删除一次,何时写入文件,日志文件限制多大,怎么分割等。
综合考虑如下几点:
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/,否则一旦发现,将按字节每人民币收费,绝不论价]
相关文章推荐
- C++内存日志系统(二)
- C++内存日志系统(三)
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
- C++获取系统内存及分别率
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(4)
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
- C/C++获取Windows系统CPU和内存及硬盘使用情况
- C++/QT 获取系统CPU、内存、磁盘、进程相关信息
- C++日志系统log4cxx使用总结
- C++写的一个小的日志系统
- 【C++】实现日志系统(含源码)
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(5)
- C/C++获取Linux系统CPU和内存及硬盘使用情况
- 内存日志系统
- C++ 32位系统内存对齐
- C/C++获取Linux系统CPU和内存及硬盘使用情况
- C++开源跨平台OJ系统判题核心FreeJudger(三)——log4cxx同时使用多个日志文件
- C++ 高性能无锁日志系统
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(6)
- Windows系统CPU内存网络性能统计第四篇 CPU 多核CPU各核使用率C++