About Log
来源:互联网 发布:自拍的淘宝图片 编辑:程序博客网 时间:2024/06/07 01:13
最近学习的关于文件日志的编写。里面涉及到的主要是文件操作、目录创建,还有就是重构和STL字符串string操作应用。
具体思想是单线程写入(保证安全写入)+管理,管理分管目录创建、文件建立。单线程维护数据安全,管理负责建立目录、创建文件和WriteFile。
考虑到程序中应用此Log,最少需要用到LOG_MAIN.log、LOG_DEBUG.log、LOG_ERROR.log三种情况,所以就简单处理为一个结构体(类型+数据);
Safe_log类中就需要带参构造函数,传入需要的文件名和路径,目的能够在初始化时就能够把文件目录和log内部起始构造完成。然后下一步就是处理出文件名称存入m_LogName,启动线程后开始处理文件路径和创建文件,使用GetModuleFilename获取文件下目录,字符操作去掉XXX.exe后+你输入的文件名称m_LogName+从系统获取的日期和时间,最后组成自己需要的一个文件目录,然后通过CreateFileName创建目录,首先需要检查目录是否存在如果存在就不需要建立,不存在则继续建立,调用的是(bool)DirExists,应用GetFileAttributes & FILE_ATTRIBUTE_DIRECTORY查看文件是否建立。如果文件存在就应该结束该任务,否则就接着建立目录,应用CreateDirectory建立新目录,目录需要一级一级的建立,如此就需要循环调用CreateFileName,可以节省自己去一个一个建立并验证是否一级一级的目录是否存在,此函数会自己验证知道目录存在并存入栈中,知道目录存在后在一级一级释放目录,最终建立完整目录。
目录建立完成后就需要operator()把你要传入的信息名称和数据组合成结构体,并发送到线程队列中去处理,并在该函数中激活线程中Execute中的WaitForSingleObject函数(SetEvent),为保证线程安全需要在队列write和read时需要加锁。在Executive中取出一个结构体,处理后发送到Log中(管理类的基函数),然后再Safe_Log中处理文件的write和read。
其中需要用到strrchr和strchr来处理字符串,需要m_strLocalPath、m_strHelpPath存储文件目录。
文件创建HFILE应用的是最原始的_lcreat、_lopen、_llseek、_lwrite和_lread。
还应用到两个格式化函数用来把系统时间和数据结合成字符串,共同存储进log文档。_snprintf和_vsnprintf。
在operator()中还要解决变参问题,就是va_list和va_end把参数全部格式化入某个变量中。
文件创立也用到宏,把LOG_MAIN.log、LOG_DEBUG.log、LOG_ERROR.log三个字符串放入到管理中的队列中。创建时,直接应用从中取出做为文件名称。
- About Log
- About MIS's Log
- about the log
- About TMG/ISA log processing ...
- information about the x264 log
- Some Questions about eXtremeDB Log
- about:
- about
- About
- About
- About
- The Log: What every software engineer should know about real-time data's unifying abstraction
- The Log: What every software engineer should know about real-time data's unifying abstraction
- SMON: ABOUT TO RECOVER UNDO SEGMENT %s messages in alert log
- WARNING : There are about 34 missing blocks. Please check the log or run fsck.
- The Log: What every software engineer should know about real-time data's unifying abstraction
- The Log: What every software engineer should know about real-time data's unifying abstraction
- The Log: What every software engineer should know about real-time data's unifying abstraction
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- TIF图像文件的读取(c++代码)
- 2014年最有用的8大HTML-CSS3框架预测
- servlet 原理分析
- 怎样把centos 6.2 系统里的网卡em1还原为eth0
- About Log
- CUDA相关资料
- 【Oracle】Oracle PL/SQL编程简介2
- Sequence operation
- java学习之路----同步于死锁
- ogre一些代码(人物 动作 地形 粒子系统)ogre例子的改写
- fedora20搭建嵌入式开发环境1 - 系统安装
- VS 编译错误 error LNK1123
- const、 volatile 和mutable