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

ubuntu spdlog 封装成c++类使用

安装及编译方法:ubuntu spdlog 日志安装及使用_spdlog_logger_info-CSDN博客

h文件: 


#ifndef LOGGING_H
#define LOGGING_H#include <iostream>
#include <cstring>
#include <sstream>
#include <string>
#include <memory>
#include <chrono>
#include <spdlog/spdlog.h>
#include <spdlog/logger.h>
#include <spdlog/common.h>
#include <spdlog/sinks/stdout_sinks.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/rotating_file_sink.h>#define ZLOG_PATH "./logs/"
#define ZLOG_FILENAME "mylog.log"#define MAX_SIZE 1024*1024*5 //单个日志文件大小
#define MAX_FILES  3         //最多存几个日志文件class ZLOG{
public:////// \brief getInstance/// \param filePath   日志文件存放的路径/// \param fileName   日志文件的名字/// \param mode       日志的模式 0-控制台 1-文件 2-控制台/文件/// \return///static ZLOG *getInstance(std::string filePath = ZLOG_PATH, std::string fileName = ZLOG_FILENAME, int mode = 0){static ZLOG zlog(filePath, fileName, mode);return &zlog;}std::shared_ptr<spdlog::logger> getLogger(){return my_logger;}private:std::shared_ptr<spdlog::logger> my_logger;   //创建的logger指针ZLOG() = default;ZLOG(std::string filePath, std::string fileName, int mode){std::stringstream log_full_path;log_full_path << filePath << fileName;if(access(filePath.c_str(), F_OK) != 0){mkdir(filePath.c_str(), S_IRWXU);  //首先检查log目录是否存在,不存在则创建}// 限制 mode 范围mode = mode < 0 ? 0 : mode;mode = mode > 2 ? 2 : mode;try{if(mode == 0){// 控制台模式my_logger = spdlog::stdout_color_mt(log_full_path.str());}else if(mode == 1){// 日志模式my_logger = spdlog::rotating_logger_mt("basic_logger", log_full_path.str(), MAX_SIZE, MAX_FILES);}else if(mode == 2){// 控制台 + 日志 模式auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(log_full_path.str(), MAX_SIZE, MAX_FILES, true);auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();std::vector<spdlog::sink_ptr> sinks;sinks.push_back(console_sink);sinks.push_back(file_sink);my_logger = std::make_shared<spdlog::logger>("multi-sink", begin(sinks), end(sinks));}my_logger->set_level(spdlog::level::trace); // 打印等级,等级 trace 以下的将不会被打印出来,可更改my_logger->set_pattern("[%Y-%m-%d %T][thread %t][%l]%v");   // 打印模板}catch(const spdlog::spdlog_ex& ex){std::cout << "ZLOG error !" << "Log initialization failed: " << ex.what() << std::endl;}}~ZLOG(){spdlog::drop_all();   //logger使用完成后,要执行drop操作,否则不能循环创建同一类型的logger}};// use embedded macro to support file and line number
#define ZLOG_TRACE(...) SPDLOG_LOGGER_CALL(ZLOG::getInstance()->getLogger().get(), spdlog::level::trace, __VA_ARGS__)
#define ZLOG_DEBUG(...) SPDLOG_LOGGER_CALL(ZLOG::getInstance()->getLogger().get(), spdlog::level::debug, __VA_ARGS__)
#define ZLOG_INFO(...) SPDLOG_LOGGER_CALL(ZLOG::getInstance()->getLogger().get(), spdlog::level::info, __VA_ARGS__)
#define ZLOG_WARN(...) SPDLOG_LOGGER_CALL(ZLOG::getInstance()->getLogger().get(), spdlog::level::warn, __VA_ARGS__)
#define ZLOG_ERROR(...) SPDLOG_LOGGER_CALL(ZLOG::getInstance()->getLogger().get(), spdlog::level::err, __VA_ARGS__)#endif // LOGGING_H

main.cpp文件

#include "logging.h"int main() {ZLOG::getInstance("./logs/", "mylog.log", 3);int param = 1;ZLOG_TRACE("this is trace log record, param: {}", ++param); // int type param is okZLOG_DEBUG("this is debug log record, param: {}", ++param);ZLOG_INFO("this is info log record, param: {}", ++param);ZLOG_WARN("this is warn log record, param: {}", double(++param)); // double type param is okZLOG_ERROR("this is error log record, param: {}", std::to_string(++param)); // string type param is okreturn 0;}

http://www.lryc.cn/news/338535.html

相关文章:

  • 【C语言】——字符串函数的使用与模拟实现(上)
  • 数据库(1)
  • VirtualBox - 与 Win10 虚拟机 与 宿主机 共享文件
  • 深入浅出 useEffect:React 函数组件中的副作用处理详解
  • 《QT实用小工具·十九》回车跳转到不同的编辑框
  • 基本的数据类型在16位、32位和64位机上所占的字节大小
  • 关注招聘 关注招聘 关注招聘
  • Django框架设计原理
  • Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树
  • OSPF动态路由实验(思科)
  • MyBatis 等类似的 XML 映射文件中,当传入的参数为空字符串时,<if> 标签可能会导致 SQL 语句中的条件判断出现意外结果。
  • git的安装
  • 蓝桥杯嵌入式模板(cubemxkeil5)
  • ELFK (Filebeat+ELK)日志分析系统
  • HttpClient、OKhttp、RestTemplate接口调用对比( Java HTTP 客户端)
  • [旅游] 景区排队上厕所
  • 三 maven的依赖管理
  • iperf3 网络性能测试
  • 08 Php学习:if语句、Switch语句
  • 二分查找的边界问题是怎么产生的?
  • 华为 2024 届校园招聘-硬件通⽤/单板开发——第十套
  • 五子棋:不会下五子棋也没关系,会用Java写五子棋就行
  • 【VUE】使用Vue和CSS动画创建滚动列表
  • 分布式结构化数据表Bigtable
  • langchain 加载 csv,json
  • Java-常见面试题收集(十三)
  • 第二证券策略:股指预计维持震荡格局 关注汽车、工程机械等板块
  • hcia datacom课程学习(6):路由与路由表基础
  • AI PC元年,华为的一张航海图、一艘渡轮和一张船票
  • NAT技术