65.9K
CodeProject 正在变化。 阅读更多。
Home

AMLog, 简易日志

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.11/5 (13投票s)

2002年5月13日

2分钟阅读

viewsIcon

107650

downloadIcon

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 支持四种不同的日志级别,你可以在运行时切换:NothingErrorInfoDeveloperInfo。有 3 个不同的宏可以用来将内容记录到日志文件中:AMLOGINFOAMLOGERRORAMLOGDEVINFO。如果日志级别与 Nothing 不同,AMLOGERROR 始终写入日志文件。仅当日志级别为 InfoDeveloperInfo 时,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 编写的。嗯,这就是全部内容。

© . All rights reserved.