RT
对于Release版本的程序来说,记录错误通常只能采用读写日志的方法解决(程序自己的日志或者系统日志),毕竟把所有错误信息用对话框(MessageBox)呈现仍然是一件值得商榷的事情
之前KC也写过类似的东西——DebugToFile。但是事实是,这个东西真的可以说是一个鸡肋
需要MFC支持
文件操作需要生成实例对象
架构设计上存在问题
于是,LogFile诞生了
和DebugToFile不同,LogFile采用单一函数接口的方式提供功能,不需要像类一样产生实例对象才能使用
另一个比较好的地方在于,LogFile采用通用/标准的设计哲学,不过很可惜,由于各种编译器间的兼容问题,未能做到100%的通用化(注意点后面说明)
LogFile提供的函数接口如下:
void LogErrorToFile(const wchar_t* lpszFileName, wchar_t* lpszFormat, …);
void ClearFile(const wchar_t* lpszFileName);
void DeleteFile(const wchar_t* lpszFileName);
LogErrorToFile支持不定参数和格式化命令,其实就是类似printf的格式化输出,并且自动在调试信息后增加一行写入时间
ClearFile清空日志文件,DeleteFile删除日志文件
LogFile的.h如下:
/************************************************** ** Project:LogToFile ** File:logfile.h ** Edition:v1.0.0 Demo ** Coder:KingsamChen [MDSA Group] ** Last Modify:2010-8-14 **************************************************/ #if _MSC_VER > 1000 #pragma once #endif #ifndef _LOGFILE_C6A57B5F_C91D_4fc0_9B38_10524313FAE1 #define _LOGFILE_C6A57B5F_C91D_4fc0_9B38_10524313FAE1 const wchar_t ERRLOG_FILE_NAME[] = L"ErrorLog.log"; void LogErrorToFile(const wchar_t* lpszFileName, wchar_t* lpszFormat, ...); void ClearFile(const wchar_t* lpszFileName); void DeleteFile(const wchar_t* lpszFileName); static int WriteFile(const wchar_t* lpszFileName, wchar_t* lpszStr); #endif
最后做几个比较重要的说明:
1.由于通用性的考虑,不能使用TCHAR等VC Only的东西,所以字符串和相关函数全部采用Unicode版
2.如果你在VC中使用LogFile,那么自动跳过这里
3.如果使用GCC,请删除logfile.cpp中的stdafx.h(VC用于预编译头)、error_t和_get_error(I/O错误设置),并不影响使用
4.如果使用GCC,请删除logfile.cpp中的crtdbg.h引用,然后加入#define _ASSERT assert。原因在于VC中assert对Release也有效果
Download:LogFile_SRC

#1 by Lieo on 2010 年 08 月 17 日 - 上午 9:17
55555555
一个字都看不懂
[回复]
#2 by dickwinters on 2010 年 08 月 17 日 - 下午 12:18
KC哥的文章好深奥~~~
[回复]
#3 by beston on 2010 年 10 月 23 日 - 下午 3:49
下不了了
[回复]
KingsamChen 回复:
十月 23rd, 2010 at 下午 5:34
因为UUShare的服务器宕机了
而我又没法存在自己的Blog主机上.so
[回复]