spdlog&rapidjson 使用记录

项目中需要记录log以及读写json,对比后选择了spdlog以及rapidjson。

SPDLog

对于log只是要求能够记录到文件中以及能够过滤,选择spdlog是因为这个只需要包含头文件即可使用,不依赖第三方库,使用简单,而且功能全面,至少足够目前使用。

用法:

下载【https://github.com/gabime/spdlog】文件后拷贝到项目工程目录,直接include即可。

1 std::shared_ptr<spdlog::logger> logger;
2 logger = spdlog::basic_logger_mt("basic_logger", "DLLLog.txt");
3 logger->set_level(spdlog::level::debug);
4 logger->info("Start DLL");

有若干个level,

enum level_enum
{
    trace = 0,
    debug = 1,
    info = 2,
    warn = 3,
    err = 4,
    critical = 5,
    off = 6
};

通过set_level进行过滤,只会显示超过setlevel 的log。

Rapidjson

也是不依赖第三方库的,只需要下载后#include后就可使用。

用法:

下载【https://github.com/Tencent/rapidjson/】,#include,然后就可以使用。

主要用来读写json文件,而读写文件也是通过转换为一个jsonstring来做的,即读取文件到一个string,然后操作该string解析为document,需要写入时候将Document序列化为一个string,将该string写入到文件。

rapidjson::Document ToolBox::ReadJsonFromFile(const std::string& filename)
{
    rapidjson::Document ret;
    ifstream ifs(filename);
    string jsonstr = "";
    string line;
    if (ifs)
    {
        while ((getline(ifs, line)))
        {
            jsonstr += line;
        }
    }    
    ret.Parse(jsonstr.c_str());
    ifs.close();
    return ret;
}
int ToolBox::WriteDocumentToFile(const rapidjson::Document& sourcedata, const std::string& filename)
{
    int ret = 0;
    ofstream ifs(filename);
    if (!ifs)
    {
        ret = -1;
        return ret;
    }
    string jsonstr = "";
    StringBuffer buffer;
    Writer<StringBuffer> writer(buffer);
    sourcedata.Accept(writer);
    jsonstr = buffer.GetString();
    ifs << jsonstr;
    ifs.close();
    return ret;
}

得到document后可以通过HasParseError()验证是否解析出错,通过HasMember("XXX")检验是否有该成员,有了就可以操作。需要注意的是如果要修改值,变量不能直接赋值,需要下面方式实现:

d["XXX"].SetString(StringRef(this->XXX.c_str()));

 

猜你喜欢

转载自www.cnblogs.com/youdias/p/9436208.html
今日推荐