当前位置: 首页 > news >正文

网站备案是干嘛的满山红网站建设

网站备案是干嘛的,满山红网站建设,杭州画册设计公司,官方网站的域名Spdlog是一个快速、异步、线程安全的C日志库#xff0c;他可以方便地记录应用程序的运行状态#xff0c;并提供多种输出格式。官网#xff1a;https://github.com/gabime/spdlog 安装教程可以参考#xff1a;https://blog.csdn.net/Harrytsz/article/details/144887297 S…Spdlog是一个快速、异步、线程安全的C日志库他可以方便地记录应用程序的运行状态并提供多种输出格式。官网https://github.com/gabime/spdlog 安装教程可以参考https://blog.csdn.net/Harrytsz/article/details/144887297 Spdlog的优点 只包含头文件速度很快无需依赖第三方库支持跨平台支持多线程—线程安全可对日志文件进行循环输出可每日生成日志文件可支持控制台日志输出可选的异步输出可定义日志格式 1、日志级别 trace SPDLOG_LEVEL_TRACE // 最低级用来记录代码执行轨迹 debug SPDLOG_LEVEL_DEBUG // 用来记录debug信息 info SPDLOG_LEVEL_INFO // 在上面的测试例子中用过 warn SPDLOG_LEVEL_WARN err SPDLOG_LEVEL_ERROR critical SPDLOG_LEVEL_CRITICAL off SPDLOG_LEVEL_OFF // 最高级2、控制台打印日志 方式一最简单的使用方式将日志输出到控制台。 #include iostream #include spdlog/spdlog.h #include spdlog/sinks/stdout_color_sinks.hvoid stdout_easy() {// 根据参数在内部创建了一个名为 console 的 logger返回 logger 的智能指针。auto console spdlog::stdout_color_mt(console);// 通过智能指针调用 logger 对象的函数。console-info(hello world); } int main() {stdout_easy();return 0; }输出结果 方式二 #include iostream #include spdlog/spdlog.h #include spdlog/sinks/stdout_color_sinks.hvoid stdout_example() {// create a color multi-threaded logger// spdlog::stdout_color_mt(console)函数创建一个名字为console的console logger// 把这个 logger 注册到 spdlog 的全局注册表中并且返回指向这个 logger 的指针shared_ptrauto console_stdout spdlog::stdout_color_mt(console);// 如果我们不知道上方创建函数返回的指针我们也可以直接通过 logger 名称来获取对应 logger // 通过 get 来获取已经创建好的 logger获取方式通过指针名同时使用 info 函数输出日志内容spdlog::get(console)-info(loggers can be retrieved from a global registry using the spdlog::get(logger_name)); }int main() {stdout_example();return 0; }输出结果 3、保存日志文件 下面的案例将日志记录保存到文件中以便于长久保存。basic_logger_mt 只是 spdlog 中封装的其中一个日志记录器还有很多其他的记录器。 #includeiostream #includespdlog/spdlog.h #include spdlog/sinks/basic_file_sink.hint main() {// 创建一个名为 basic_logger 的日志记录器并且返回指针。// mt 表示多线程,意味着多个线程中使用同一个日志记录器。// 需要注意的是在文件内添加数据是通过追加的形式进行的并且如果没有创建文件会自动创建文件。auto basic_logger spdlog::basic_logger_mt(basic_logger, ./logs/basic_log.txt);for (int i 0; i 10000; i) {basic_logger-info(Test file logger{}, i);}return 0; }4、自定义日志记录器 我们根据以上的学习之后大体了解了其中的运行机制所以我们就可以不使用他封装的日志记录器而是使用他内部的 logger 对象封装适合自己的日志记录器。 需要注意的是所谓的不同的日志记录器其实就是不同的 logger 对象那么用什么来区分不同的 logger 对象呢就是用创建logger对象时传入的参数 sink 对象这个sink对象标记着不同的类型把他作为参数 logger 会根据 sink 对象类型的不同创建不同的日志记录器。 这种方式有很大的用途比如我们可以创建一个日志记录器但是里边有多个类型的 sink从而可以一个 logger 能够实现多种效果。 #includeiostream #includespdlog/spdlog.h //#include spdlog/sinks/stdout_sinks.h #include spdlog/sinks/stdout_color_sinks.hvoid make_console_spdlog() {/*auto console_level std::make_sharedspdlog::sinks::stdout_sink_mt();*/ // 黑白日志auto console_level std::make_sharedspdlog::sinks::stdout_color_sink_mt(); // 彩色日志auto console std::make_sharedspdlog::logger(console, console_level);console-info(hello world); }int main() {make_console_spdlog();return 0; }输出结果 注意通过手动创建的日志记录器是无法通过名字在 spdlog 中进行查找的因为他并没有注册到 spdlog 的全局注册表。 void make_console_spdlog() {auto console_level std::make_sharedspdlog::sinks::stdout_sink_mt();auto console std::make_sharedspdlog::logger(console, console_level);// 直接使用这种方式去获取日志记录器发生错误spdlog::get(console)-info(hello world!); }所以在创建日志记录器完成后要将其注册到spdlog的全局注册表中。 #includeiostream #includespdlog/spdlog.h #include spdlog/sinks/stdout_color_sinks.hvoid make_console_spdlog() {auto console_level std::make_sharedspdlog::sinks::stdout_color_sink_mt();auto console std::make_sharedspdlog::logger(console, console_level);// 将创建的日志记录器注册到全局注册表中spdlog::register_logger(console);spdlog::get(console)-info(hello world!); }int main() {make_console_spdlog();return 0; }5、多记录器共享文件 #include iostream #include spdlog/spdlog.h #include spdlog/sinks/basic_file_sink.hvoid multi_file_write() {// 创建filesink以便多个日志共享器共享。auto filesink std::make_sharedspdlog::sinks::basic_file_sink_mt(./logs/multilogger.txt);// 创建两个日志记录器来进行测试auto onelogger std::make_sharedspdlog::logger(onelogger, filesink);auto twologger std::make_sharedspdlog::logger(twologger, filesink);// 注册进spdlog的全局注册表spdlog::register_logger(onelogger);spdlog::register_logger(twologger);for (int i 0; i 100; i) {onelogger-info(onelogger write:{}, i);twologger-info(twologger write:{}, i);} }int main() {multi_file_write();return 0; }6、日志分割 在我们的应用程序有很多日志需要记录时每个日志文件就会变得非常大这样就会影响应用程序的性能以及稳定性。所以为了解决这个问题可以使用Spdlog的日志分割功能。 rotating log 滚动日志当日志文件超出规定大小时会删除当前日志文件中所有内容重新开始写入 #includeiostream #includespdlog/spdlog.h #include spdlog/sinks/rotating_file_sink.hvoid rotaing_file() {// 首先定义要使用分割文件的大小和数量int max_size 1048576 * 5;int file_size 3;// 创建 rotaing_logger_mt 日志记录器auto rotaing_file spdlog::rotating_logger_mt(rotaing_file, ./logs/rotaingLogger.txt, max_size, file_size);for (int i 0; i 100000; i) {rotaing_file-info(rotaing file:{}, i);} }int main() {rotaing_file();return 0; }7、定时日志 Spdlog还可以实现定时创建文件存储日志的功能。 #includeiostream #includespdlog/spdlog.h #include spdlog/sinks/daily_file_sink.hvoid daily_log() {// 创建daily_log日志// 参数介绍 1日志记录器名称 2文件名 3时 4分auto daily_log spdlog::daily_logger_mt(daily_log, ./logs/daily_log.txt, 16, 18);for (int i 0; i 100000; i) {daily_log-info(daily log print {}, i);} }int main() {daily_log();return 0; }8、记录器包含多个 sink #includeiostream #includespdlog/spdlog.h #includespdlog/sinks/stdout_color_sinks.h #includespdlog/sinks/basic_file_sink.hvoid multi_sink() {// 创建两个sink一个用于控制台输出一个用于文件输出auto console_sink std::make_sharedspdlog::sinks::stdout_color_sink_mt();auto file_sink std::make_sharedspdlog::sinks::basic_file_sink_mt(./logs/multi_sink.txt);// 设置两者输出等级console_sink-set_level(spdlog::level::info);file_sink-set_level(spdlog::level::debug);// 将两种不同的sink放到一个日志输出器中auto multi_sink std::make_sharedspdlog::logger(multi_sink, spdlog::sinks_init_list({ console_sink, file_sink }));multi_sink-set_level(spdlog::level::debug);// 输出不同等级日志测试multi_sink-info(hello world info);multi_sink-debug(hello world debug); }int main() {multi_sink();return 0; }9、其他介绍 通过上面的学习我们学会了 spdlog 其函数的基本使用方式下面对 spdlog 中常用的一些函数和类进行介绍。 level_enum日志等级枚举包括trace、info、debug、warn、err、critical、off、n_levels。sink日志记录槽进行底层操作比如格式化内容输出内容到控制台/文件的类。spdlog自带的几种sinks已经能满足日常需求也可以派生其基类设计新的 sink 以满足特殊的需求。sink类主要使用的函数包括 set_pattern(const std::string)设置日志输出格式。set_level(level_enum)设置日志输出的最低等级。log(log_msg)由logger自动调用外部不会主动调用。 logger日志记录器被顶层调用来输出日志的类。一个logger对象中存储有多个sink当调用logger的日志输出函数时logger会调用自身存储的所有sink对象的log(log_msg)函数进行输出。与自身的sink对应spdlog也自带了几种logger。logger类主要使用的函数包括 set_pattern(const std::string)设置logger包括的所有sink的日志输出内容格式。set_level(level_enum)设置logger日志输出最低等级如果logger包含的sink没有设置日志等级的话则会为其设置日志等级。log(level_enum level, log_msg content)按照level等级进行输出contentlogger其中日志输出最低等级小于或等于level的sink会执行输出操作。info(content, arg1, arg2…)按照trace等级进行输出输出内容由content与后面的采纳数格式化组成。荣磊的函数还包括debug/trace/warn…。 st/mt对象版本spdlog 中 logger 对象和 sink 对象都有两种版本一种是以 st 结尾的单线程版本以及以 mt 结尾的多线程版本。 st单线程版本不用加锁效率更高。mt多线程版本用于多线程程序是线程安全的。
http://www.sczhlp.com/news/180815/

相关文章:

  • 亚马逊商城官方网站一个人开发游戏难吗
  • 先做网站后付款那个做图网站叫什么
  • 虚拟主机建网站线上销售技巧
  • 建设厅培训中心网站手机移动网站开发
  • 如何自己建立一个网站免费wordpress云服务器
  • 织梦建设网站全过程人工智能培训公司
  • 建设通网站原理网站做导航条
  • python做网站 教育自己做的网站如何赚钱吗
  • dedecms企业网站模板北京朝阳区楼盘
  • 给女朋友做的网站亿速云官网
  • 学校班级网站建设主页源代码PHPvs进行网站建设
  • 济南建设网站公司网站加栏目
  • 在家做网站维护兼职百度推广和百度竞价有什么区别
  • 松岗做网站联系电话wordpress收集访问量
  • 网站优化防范网站建设如何制作教程
  • 生成二维码的网站企业网站建设申请怎么写
  • 网站开发设计师薪资做led灯网站有哪些呢
  • 家政网站怎么做平面设计培训大概费用
  • 网站安全 代码网站维护的基本内容包括哪些
  • seo建站公司百度问答app下载
  • 房产中介网站源码网站注册理由
  • 用树莓派做网站服务器速度快吗做网站平台赚钱吗
  • 淳安网站建设制作宿迁司法拍卖房产网
  • 深圳网站建设ucreatorwordpress 自定义字段插件
  • 福州建设企业网站客户端app下载安装
  • 做淘客网站怎么网站设计与建设代码
  • 怎样不让网站自动跳转wap广州网站建设费
  • 如何做酒网站企业网站加快企业信息化建设
  • 宁波网站建设开发公司昆山做网站的公昆山做网站的公司司
  • 佛山新网站建设特色网站市场推广