简单的日志文件






4.54/5 (19投票s)
2002年6月26日
3分钟阅读

276171

9948
记录运行时信息的简单日志文件。
引言
有时我们需要在将软件交给客户后记录一些信息,这样当发生不好的事情时,我们就可以在没有调试环境的情况下找到它。 有时我们希望在程序的发布模式下获取一些跟踪信息。 在这些情况下,日志文件很有用。
在 CodeProject 和其他地方有很多日志文件代码示例。 与其他一些相比,这个非常简单。
CLogFile
类只有三个成员函数:一个构造函数、一个析构函数和一个名为 Write
的成员。 让我们看看如何使用它。
构造函数需要 3 个参数
CLogFile(LPCTSTR strFile, bool bAppend = FALSE, long lTruncate = 4096)
第一个参数是文件名。 它可以包含绝对路径,或者只是一个文件名。 在后一种情况下,日志文件将在与可执行文件相同的目录中创建。 没有什么与“当前目录”有关,它总是给我带来麻烦。
第二个参数指示如果文件已存在,是否应将日志信息附加到文件末尾。
第三个参数指示截断大小。 如果日志文件超过此数字,它将倒回到开头并继续。 以下信息从头开始写入文件。
第二个成员是析构函数。 它做一些清理工作。 无话可说。
最重要的成员是第三个
void Write(LPCTSTR pszFormat, ...)
此成员将一行写入日志文件。 它的用法与 printf 相同。 似乎有很多关于此成员的内容要说,但我更喜欢保持简单。 而且它很简单。
特点
- 文件名可以使用绝对路径或仅使用名称。
- 每条日志行都附加一个时间戳。
- 使用类似 printf 的格式来编写日志行。
- 多线程安全。
其他任何东西都在代码中。 这是一个 .h 文件中的 108 行代码,包括注释和空行。
由 Zoltan 更新
我的项目是一个 24/7 的应用程序,因此一个日志文件可能太大。 所以我每天创建新的日志文件,这意味着几个月内在每个目录中创建了大量文件。 最后,我为每一年、每一个月创建了文件夹,并将日志文件存储在月份文件夹中。
我编写了以下函数来更改当前文件名
void ChangeFile(LPCTSTR strFile, bool bAppend = TRUE, long lTruncate = 4096);
这些参数与旧构造函数相同,当文件名与存储的 m_filename 不同时,首先关闭旧的记录器文件,然后在选定的文件夹中打开新的记录器文件。
使用此功能
最重要的是不要忘记
#define _DEBUG_LOG TRUE #include "logfile.h"
以下代码展示了如何使用它的一个例子。 %02i 是月份的一个有用的选择,因此 09 月不会超过 10 月。
对于测试,选择 systime.wMinute 以更快地创建新文件夹。
CString name;
SYSTEMTIME systime;
GetLocalTime(&systime);
name.Format("%i\\%02i\\log_%02i%02i%02i.txt",
systime.wYear,
systime.wMonth,
systime.wYear,
systime.wMonth,
systime.wDay);
m_log.ChangeFile(name);
特点
- 文件名可以使用绝对路径或仅使用名称。 (原始作者: Yao)
- 文件名可以在新文件夹中,并且记录器将创建它。
修订历史
- 2002年6月26日 - 初始修订版
- 2003 年 3 月 20 日 - 由 Zoltan 更新