我是靠谱客的博主 悦耳马里奥,这篇文章主要介绍spdlog&rapidjson 使用记录,现在分享给大家,希望可以做个参考。

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

 

SPDLog

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

用法:

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

 

复制代码
1
2
3
4
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,

复制代码
1
2
3
4
5
6
7
8
9
10
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写入到文件。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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; }

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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")检验是否有该成员,有了就可以操作。需要注意的是如果要修改值,变量不能直接赋值,需要下面方式实现:

复制代码
1
d["XXX"].SetString(StringRef(this->XXX.c_str()));

 

 

 

 

转载于:https://www.cnblogs.com/youdias/p/9436208.html

最后

以上就是悦耳马里奥最近收集整理的关于spdlog&rapidjson 使用记录的全部内容,更多相关spdlog&rapidjson内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部