spdlog&rapidjson 使用记录
项目中需要记录log以及读写json,对比后选择了spdlog以及rapidjson。
SPDLog
对于log只是要求能够记录到文件中以及能够过滤,选择spdlog是因为这个只需要包含头文件即可使用,不依赖第三方库,使用简单,而且功能全面,至少足够目前使用。
用法:
下载【https://github.com/gabime/spdlog】文件后拷贝到项目工程目录,直接include即可。
std::shared_ptr<spdlog::logger> logger;
logger = spdlog::basic_logger_mt("basic_logger", "DLLLog.txt");
logger->set_level(spdlog::level::debug);
logger->info("Start DLL");
有若干个level,
enum level_enum
{
trace = ,
debug = ,
info = ,
warn = ,
err = ,
critical = ,
off =
};
通过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 = ;
ofstream ifs(filename);
if (!ifs)
{
ret = -;
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()));
spdlog&rapidjson 使用记录的更多相关文章
- spdlog 基本结构分析
spdlog 基本结构分析 代码取自 V1.5.0, 代码堪称美学. spdlog 是一个只有头文件的C++日志库,速度非常快,扩展性很强,更重要的是 社区活跃,文档齐全. 使用 参考官方的 exam ...
- C++ spdlog日志管理
[1]spdlog简介 spdlog是一个开源的.快速的.仅有头文件的基于C++11实现的一款C++专用日志管理库. [2]源码下载 下载地址:https://github.com/gabime/sp ...
- xcode使用spdlog(1.7)总结
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 注意️ 请选择对c++11支持完善的编译器, 因为spdlog一直更新. 本文演示环境: m ...
- 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL
在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- Kali对wifi的破解记录
好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...
- 2015 西雅图微软总部MVP峰会记录
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
随机推荐
- eclipse中windows下的preferences左栏没有tomcat?
是因为缺少eclipse for tomcat 插件,到http://www.eclipsetotale.com/tomcatPlugin.html此网站下载,我的eclipse版本是4.4版本的,所 ...
- HDU6442(二项式)
要点 懒得打公式了,题解 把题目要求的复杂公式化简成熟悉的东西,一是看穿前面加个\(n!\)化为\(C_n^i,i为奇数\):二是将奇数的条件去掉的数学技巧. 形为\({(a + b\sqrt{B}) ...
- 洛谷2444(Trie图上dfs判环)
要点 并没问具体方案,说明很可能不是构造. 思考不断读入这个文本串,然后中间不出现某些文法的串.啊,这就是个自动机. 将不合法串使用ac自动机构成一个Trie图,我们需要的字符串就是在这个自动机上无限 ...
- bzoj1822: [JSOI2010]Frozen Nova 冷冻波网络流
思路比较显然:二分答案,流流流 但是实现的时候感觉自己数学捉急.. 一开始算了个直线到点距离.... 应该是线段到点距离 #include <bits/stdc++.h> #define ...
- Uva10755
在题中的A*B*C的矩形中,当确定X1,X2,Y1,Y2时,1->z的子矩形的和为 sum[x2][y2][1] -(sum[x1-1][y2][1] + sum[x2][y1-1][1] -s ...
- Dev控件工具箱安装
安装目录\Components\Tools,打开命令行 安装DEV工具 $ ToolboxCreator.exe /ini:toolboxcreator.ini 移除DEV工具 $ ToolboxCr ...
- sqlserver 删除两种方法比较
delete from tb where id=1 删除数据 truncate table tb where id=1 第一种 自增长id不会删除,第二种会删除
- IDEA2017 配置Maven
配置本地仓库位置 配置一下Maven的本地仓库路径,首先找到解压Maven的目录,找到conf -> settings.xml这个配置文件打开. 打开settings.xml 配置文件,选一个本 ...
- 一个例子说明Jsp三大重要内置对象的生命周期
此处Jsp的三大内置对象指:request,session以及application.他们共有的方法:setAttribute,getAttribute,方法名和方法作用都是相同的,但是作用范围不一样 ...
- js浮点数乘除法
JS在处理浮点数计算时经常会遇到精度的问题,上一篇博客封装了JS浮点数加减法的方法,这一次来封装一下js浮点数乘除法运算. 其实浮点除法的封装跟加减法的封装原理是一样,只是在第一次计算完后会再复位小数 ...