线程安全的日志记录器,自动从发布版本中删除日志消息





5.00/5 (6投票s)
2000年9月14日

106101

1457
用于多线程应用程序的日志文件类
引言
这个类使得在多线程应用程序中使用日志文件成为可能,并且具有几个有用的特性,这些特性被广泛应用于我的多线程、对时间敏感的项目中,在这些项目中,Visual C++ 集成调试器具有非常有限的用途。
CDebugPrintf
类提供了一些有用的特性
- 在多线程应用程序中进行线程安全的日志记录。
- 自动从应用程序的发布版本中删除日志消息。
您不再需要手动删除或注释掉发布版本中的日志消息。 发布版本将没有任何开销或未使用的信息在可执行文件中。 - 您可以同时从不同的应用程序将日志消息写入同一个文件。
当需要探索两个或多个应用程序之间的交互和时序问题时,这很有用。 - 使用
printf
风格的格式文本:%s
,%d
,%4.1d
等。
抱歉,但不支持浮点数。 - 日志文件中的每个消息都有日期和时间戳。
此外,该类还提供从应用程序启动开始的时间差戳。 - 控制台输出以及对
GetLastError
函数返回的错误代码的轻松记录。 - 保存旧的日志文件。
- 仅使用 Windows API 函数。因此,即使在非 MFC 应用程序中也可以使用它。
该类易于使用。
- 将文件 dbg.h 和 dbg.cpp 包含到您的项目中。
- 在您想将任何内容写入日志文件的任何时候,请使用
PRINTF
宏。
日志文件输出示例
0.000 08/25/2000 15:04:48 User name = KVA
0.015 08/25/2000 15:04:48 ISAPI = "TraxDataMgr.dll"
0.015 08/25/2000 15:04:48 CActionHandler constructor
0.015 08/25/2000 15:04:48 CDataMgrActionHandler constructor
5.123 08/25/2000 15:04:53 0 HttpExtensionProc: started
5.123 08/25/2000 15:04:53 Execute request 1 started.
5.672 08/25/2000 15:04:53 CIndexer constructor: done
5.693 08/25/2000 15:04:53 Open: D:\Data\Docs\customer
5.693 08/25/2000 15:04:53 Loading index table from 'D:\Data\Docs\customer.idx'
5.693 08/25/2000 15:04:53 Count: 93560
6.132 08/25/2000 15:04:54 Index loading finished ... OK
6.375 08/25/2000 15:04:54 Execute request 1 finished.
6.375 08/25/2000 15:04:54 0 HttpExtensionProc: finished
类用法
void SomeFunction( char* arg1, int arg2, string& arg3 )
{
// doing something
...
PRINTF("Something happened by using %s and %d arguments", arg1, arg2);
...
// doing something
...
PRINTF(arg3);
...
SHOW_CONSOLE();
PRINTF("This message is visible on console and in log-file.");
}
备注
由于透明地从发布版本中删除日志消息存在问题,所有日志消息必须适应源代码的一行。
PRINTF("One line messages are supported.");
PRINTF("Multi-line messages %s %s",
"are not",
"supported.");
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。