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

简单多日志记录器(无 MFC)

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.86/5 (5投票s)

2006 年 10 月 10 日

GPL3

2分钟阅读

viewsIcon

33682

downloadIcon

831

一个简单的 HTML 和纯文本日志记录器。

引言

这是一个简单的日志记录器,可以输出到 *.html*.log。我需要一个易于阅读的日志文件来记录我的游戏和应用程序。所以,有一天早上,我想到 HTML 日志将是最易读的,但对于我来说,编写起来比较困难,因为我不是 C++ 方面的专家。另一方面,纯文本日志文件是编写日志记录器的最简单方法,但对于游戏玩家来说,阅读起来比较困难。我花了整整两天时间来寻找最佳的编码方法。

使用代码

我在编写任何代码时的主要目标是帮助开发人员使源代码更易于阅读和更易于编写(更少的行数)。因此,要使用该类,只需使用以下构造函数之一创建 CLogFile

class CLogFile
{
public:
    CLogFile(void);
    CLogFile(const CLogFile& other);
    CLogFile(const string& Filename, ELogType Type);

    //...

};

如果您使用 CLogFile::CLogFile(const string& Filename, ELogType Type),"Filename" 是日志文件的名称,不包括扩展名。如果您使用默认构造函数 (CLogFile::CLogFile(void);),则需要调用 void CLogFile::open(const std::string& Filename, ELogType Type)。参数与前面解释的构造函数相同。之后,只需调用 void CLogFile::log(const std::string& Message, ELogLevel Level)void CLogFile::log(const boost::format& Message, ELogLevel Level) 将消息记录到文件中。请注意,我重载了 CLogFile::log 以使用 boost::format

示例

#include <iostream>
#include <stdlib.h>
#include "CLogFile.h"

CLogFile* log1;
CLogFile* log2;

#define my_log(a, b) log1->log(a, b); log2->log(a, b);
//Just to make a macro that does all for me!! ;)

int main(int argc, char* argv[])
{
    try
    {
        log1 = new CLogFile("log", CLogFile::ELT_HTML);
        log2 = new CLogFile("log", CLogFile::ELT_TEXT);

        my_log("PROGRAM STARTED", CLogFile::ELL_DEBUG);

        my_log("", CLogFile::ELL_WARNING);
        my_log("This is a Warning", CLogFile::ELL_WARNING);
        my_log("", CLogFile::ELL_WARNING);

        my_log("", CLogFile::ELL_ERROR);
        my_log("This is an Error", CLogFile::ELL_ERROR);
        my_log("", CLogFile::ELL_ERROR);

        system("pause");

        my_log("PROGRAM ENDED", CLogFile::ELL_DEBUG);
        delete log1;
        delete log2;
    }
    catch(CLogFile::Exception& e)
    {
        std::cout << e.getMessageAsStr() << std::endl;
        system("pause");
    }
    catch(...)
    {
        std::cout << "Unknown Exception Thrown" << std::endl;
        system("pause");
    }

    return 0;
}

重要提示

要正确构建所有内容,您需要 Boost 库 1.33.0 构建并将其目录添加到您的 IDE 中。

结论

这就是我的第一篇文章的全部内容!我希望它对某人有用。:D 如果有人有任何改进建议,请给我发电子邮件!

历史

  • 2006/11/10:初始发布。
  • 2006/11/11:更新 -> 现在,该类在出错时会抛出 CLogFile::Exception。还有一些错误修复。
© . All rights reserved.