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

C++日志

0 资料

  • 各种C++日志库的对比
  • spdlog官网
  • spdlog教程
  • spdlog教程
  • 非常有用的博客

1 spdlog

1.1 简介

spdlog是一个用C++11编写的高性能日志库,优点:

- 高性能
- 用法类似python的logging

1.2 安装

  • git clone https://github.com/gabime/spdlog.git
    • cd spdlog
    • mkdir build
    • cd build
    • cmake …
    • make
  • vim main.cpp,填入以下测试代码
#include "spdlog/spdlog.h"int main() {//Use the default logger (stdout, multi-threaded, colored)spdlog::info("hello spd");spdlog::info("hello {}, {}", "shuo", 29);   return 0;
}
  • 保存并退出,其文件目录如下
$ tree -L 2
.
|-- main.cpp
`-- spdlog|-- include
  • 编译测试代码(注意要用C++11的标准)
    • g++ --std=c++11 -I spdlog/include main.cpp

1.3 使用

1.3.1 基本使用

#include <iostream>
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"  //支持输出到标准终端
#include "spdlog/sinks/basic_file_sink.h" // 支持保存到基础文档
#include "spdlog/sinks/rotating_file_sink.h" // 支持保存成滚动文档int main(int, char* [])
{try {// 1、将日志打印到标准输出中auto console = spdlog::stdout_color_mt("console");console->set_level(spdlog::level::warn);  //设置日志记录器的输出日志等级console->info("Welcome to spdlog");// 2、将日志保存到文本中 (not rotated)auto my_logger = spdlog::basic_logger_mt("basic_logger", "logs/basic.txt");my_logger->info("hello");// 3、将文字保存到一个迭代的文本中,改文本最大5M,最多有3个文本auto file_logger = spdlog::rotating_logger_mt("file_logger", "myfilename", 1024 * 1024 * 5, 3);file_logger->info("hello file");}catch (const spdlog::spdlog_ex& ex){std::cout << "Log initialization failed: " << ex.what() << std::endl;}
}

1.3.2 多个日志记录器共享一个日志文件

#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/spdlog.h"
#include <iostream>
int main(int, char *[]) {// 设置文件异步共享终端auto daily_sink = std::make_shared<spdlog::sinks::daily_file_sink_mt>("logfile", 23, 59);// 创建日志异步发生器auto net_logger = std::make_shared<spdlog::logger>("net", daily_sink);auto hw_logger = std::make_shared<spdlog::logger>("hw", daily_sink);// 设置各个发生器的日志等级 (error, warn, info, debug)net_logger->set_level(spdlog::level::info);hw_logger->set_level(spdlog::level::debug);// 全局登记发生器,使之能使用spdlog::get(logger_name)的方式在其他地方被获取spdlog::register_logger(net_logger);net_logger->info("hello net_logger");hw_logger->info("hello hw_logger");
}

1.3.3 通过spdlog::get(“…”)来访问一个已经创建的logger

spdlog对于每个线程,都维护着一个全局的日志发生器,所有日志发生器在产生的时候都会被自动注册。在程序的其他地方,可以使用** auto 指针 = spdlog::get(日志发生器名称);来获取改日志发生器的指针。如果该日志发生器不存在,则会返回空指针。因此,可以使用if(指针)**来判断是否有该日志发生器。

class logger_get
{private:std::shared_ptr<spdlog::logger> _logger = spdlog::get("console"); public:void print_hello(){_logger->info("helloworld");return;}
};

然后在main函数中试着调用这个类

int main(int, char* [])
{...logger_get test;test.print_hello();
}
http://www.xdnf.cn/news/7898.html

相关文章:

  • DDR中Geardown Mode理解/2N模式理解
  • 【鸿蒙开发】Hi3861学习笔记-DHT11温湿度传感器
  • Cmake 使用教程
  • 【免费分享】上百个网站整合到一个工具当中来使用,并且支持自定义添加
  • 充电桩APP的数据分析:如何用大数据优化运营?
  • 中电金信与上海华瑞银行、复旦大学金融科技研究院签署合作备忘录
  • DeepSeek 提示词大全
  • 在Settings的一级菜单中增加一个选项
  • TYUT-企业级开发教程-第9章
  • python06——组合数据类型
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • UML基本概念:构造块、公共机制与规则
  • 45页 @《人工智能生命体 新启点》中國龍 原创连载
  • 智能共享充电桩软件系智能共享充电桩软件系统:如何一站式定制解决方案?
  • 运维Web服务器核心知识与实战指南
  • 算法打卡第三天
  • 【算法】滑动窗口(细节探究,易错解析)5.21
  • Baklib知识中台驱动智能服务创新
  • AbMole| Ferrostatin-1(25322-68-3,M2698,铁抑素-1)
  • pinia的简单使用
  • 家用和类似用途电器的安全 第1部分:通用要求 与2005版差异(7)
  • openlayer:12在某一区县内(一定区域内)加载不同类型的坐标位置,点击后弹出overlay弹窗显示坐标点详细信息,点击弹窗上关闭按钮关闭弹窗
  • 鸿蒙版Flutter库torch_light手电筒功能深度适配
  • 传统Spring MVC + RESTful 与 Vue3 结合 JWT Token 验证的示例
  • 143.重排链表的尝试
  • 数据库表关系详解
  • URL 类知识点详解
  • Python入门手册:正则表达式的学习
  • 代理IP在市场分析与用户画像研究中的应用解析
  • spring cloud alibaba-Geteway详解