AMLog, 简易日志






3.11/5 (13投票s)
2002年5月13日
2分钟阅读

107650

954
一个简单的实用程序,
引言
有一天晚上我睡不着觉,我在想我真的需要一个小的日志实用程序。它应该易于使用,只需要在StdAfx.h中#include "AMLog.h"
。我还希望它能够记录行号和文件名,所以它需要用宏来完成,而不是函数,因为我不想每次调用日志函数时都写__FILE__
和__LINE__
。我还想要不同的日志级别,可以由用户更改。我做了很多服务器应用程序,如果客户端的应用程序出现问题,我只需要告诉他将日志级别设置为“开发者日志”,然后将日志文件发送给我。我真正想要的最后一件事是能够使用printf
风格进行日志记录。所有的日志函数都支持这一点,所以你可以像这样写一个日志条目
AMLOGINFO("The value of i is: %d, and s is: %s", i, s)
它也适用于 UNICODE,因为我做了很多使用 Unicode 启用的应用程序的工作。日志记录函数是线程安全的。所有日志记录都通过临界区同步,因此在多线程应用程序中使用是完全安全的。
如何使用
AMLog 实际上很容易使用。只需在StdAfx.h中 #include "AMLog.h"
,并调用 AMLOG_SETFILENAME("test.log")
,就可以开始使用了。AMLOG_SETFILENAME
宏只需要一个文件名,然后它会附加可执行文件的完整路径。默认情况下不进行任何日志记录。AMLog 支持四种不同的日志级别,你可以在运行时切换:Nothing
、Error
、Info
和 DeveloperInfo
。有 3 个不同的宏可以用来将内容记录到日志文件中:AMLOGINFO
、AMLOGERROR
和 AMLOGDEVINFO
。如果日志级别与 Nothing
不同,AMLOGERROR
始终写入日志文件。仅当日志级别为 Info
或 DeveloperInfo
时,AMLOGINFO
才会写入日志。 AMLOGDEVINFO
仅当日志级别为 DeveloperInfo
时才写入日志。
你可以使用以下宏设置日志级别,AMLOG_SETLOGLEVEL_NOTHING, AMLOG_SETLOGLEVEL_ERROR, AMLOG_SETLOGLEVEL_INFO, AMLOG_SETLOGLEVEL_DEVELOPERINFO
。如果你只想记录错误,只需编写 AMLOG_SETLOGLEVEL_ERROR;
。
如果你希望你记录的内容也像 TRACE()
语句一样进入调试器的“输出”窗口,你只需要在包含AmLog.h之前在 StdAfx.h 中定义 #define AMLOG_TRACE
。如果你制作控制台应用程序,你也可以将输出写入 stdout
,只需定义 #define AMLOG_STDOUT
。
日志格式
日志格式非常基本,它将所有 CRLF 对转换为“|”,以使每个日志条目位于单行上。如果日志级别为 DeveloperInfo
,则源文件名和行号将添加到日志文件中,以便更容易进行调试。这是源文件中包含的测试程序的输出。
请注意,下面的输出已换行以防止滚动。 实际输出不会换行。
2002-05-14 21:39:08 Error "i" is now: 0, Loglevel is: Error
2002-05-14 21:39:08 Error "i" is now: 1, Loglevel is: Error
2002-05-14 21:39:08 Error "i" is now: 2, Loglevel is: Error
2002-05-14 21:39:08 Error "i" is now: 3, Loglevel is: Error
2002-05-14 21:39:08 Error "i" is now: 4, Loglevel is: Error
2002-05-14 21:39:08 Info "i" is now: 0, Loglevel is: Info
2002-05-14 21:39:08 Error "i" is now: 0, Loglevel is: Info
2002-05-14 21:39:08 Info "i" is now: 1, Loglevel is: Info
2002-05-14 21:39:08 Error "i" is now: 1, Loglevel is: Info
2002-05-14 21:39:08 Info "i" is now: 2, Loglevel is: Info
2002-05-14 21:39:08 Error "i" is now: 2, Loglevel is: Info
2002-05-14 21:39:08 Info "i" is now: 3, Loglevel is: Info
2002-05-14 21:39:08 Error "i" is now: 3, Loglevel is: Info
2002-05-14 21:39:08 Info "i" is now: 4, Loglevel is: Info
2002-05-14 21:39:08 Error "i" is now: 4, Loglevel is: Info
2002-05-14 21:39:08 Info amlogtestapp.cpp, 10
"i" is now: 0, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Error amlogtestapp.cpp, 11
"i" is now: 0, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 DevInfo amlogtestapp.cpp, 12
"i" is now: 0, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Info amlogtestapp.cpp, 10
"i" is now: 1, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Error amlogtestapp.cpp, 11
"i" is now: 1, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 DevInfo amlogtestapp.cpp, 12
"i" is now: 1, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Info amlogtestapp.cpp, 10
"i" is now: 2, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Error amlogtestapp.cpp, 11
"i" is now: 2, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 DevInfo amlogtestapp.cpp, 12
"i" is now: 2, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Info amlogtestapp.cpp, 10
"i" is now: 3, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Error amlogtestapp.cpp, 11
"i" is now: 3, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 DevInfo amlogtestapp.cpp, 12
"i" is now: 3, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Info amlogtestapp.cpp, 10
"i" is now: 4, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 Error amlogtestapp.cpp, 11
"i" is now: 4, Loglevel is: DeveloperInfo
2002-05-14 21:39:08 DevInfo amlogtestapp.cpp, 12
"i" is now: 4, Loglevel is: DeveloperInfo
最后 15 行是用 Loglevel
DeveloperInfo
编写的。嗯,这就是全部内容。