当前位置: 首页 > 科技观察

C++日志工具推荐的Spdlog

时间:2023-03-15 19:19:46 科技观察

,转载请联系嵌入式技术笔记公众号。c++日志工具spdlogspdlog日志是一个纯头文件,使用起来比较方便。使用时只需要简单的初始化即可。这里对其初始化做了一个简单的封装,使用起来更方便。可以分别设置输出到控制台和输出到文件的级别,并支持动态设置。封装类代码头文件#ifndef_CSPDLOG_H_#define_CSPDLOG_H_#include"spdlog/spdlog.h"#include"spdlog/fmt/bin_to_hex.h"#include#includeclassCSpdlog{protected:CSpdlog();~CSpdlog();staticCSpdlog*m_instance;public:staticCSpdlog*GetInstance();voidInit(conststd::string&name,conststd::string&logPath,std::size_tmax_size=1048576,std::size_tmax_file=2);voidSetConsoleLogLevel(spdlog::level::level_enumlog_level);voidSetFileLogLevel(spdlog::level::level_enumlog_level);private:std::vectorm_sinks;std::shared_ptrm_logger;};#endif源文件#include"cspdlog.h"#include#include#include"spdlog/sinks/stdout_color_sinks.h"//或"../stdout_sinks.h"ifnocolorneeded#include"spdlog/sinks/basic_file_sink.h"#include"spdlog/sinks/rotating_file_sink.h"CSpdlog::CSpdlog(){}CSpdlog::~CSpdlog(){}voidCSpdlog::Init(conststd::string&name,conststd::string&log_path,std::size_tmax_size,std::size_tmax_file){try{autoconsole_sink=std::make_shared();console_sink->set_level(spdlog::level::debug);console_sink->set_pattern("%^[%Y-%m-%d%H:%M:%S:%e][%n][tid:%t][%l]%v%$");std::stringlogFile=log_path+"/"+name+".txt";//autofile_sink=std::make_shared("logs/multisink.txt",false);autofile_sink=std::make_shared(logFile,max_size,max_file);file_sink->set_pattern("[%Y-%m-%d%H:%M:%S:%e][%n][tid:%t][%l]%v");file_sink->set_level(spdlog::level::warn);m_sinks.push_back(console_sink);m_sinks.push_back(file_sink);//spdlog::logger*logger=newspdlog::logger("multi_sink",{console_sink,file_sink});m_logger=std::make_shared(name,begin(m_sinks),end(m_sinks));//spdlog::set_error_handler([](conststd::string&msg){printf("*****Customlogerrorhandler,%s*****%\n",msg.c_str());});//注册到spdlog里spdlog::register_logger(m_logger);//m_logger->info("loginitdone.");m_logger->flush_on(spdlog::level::level_enum::warn);}catch(constspdlog::spdlog_ex&ex){std::cout<<“Loginitializationfaild”<set_level(log_level);}voidCSpdlog::SetFileLogLevel(spdlog::level::level_enumlog_level){m_sinks[1]->set_level(log_level);}CSpdlog*CSpdlog::m_instance=NULL;CSpdlog*CSpdlog::GetInstance(){if(m_instance==NULL){m_instance=newCSpdlog;}returnm_instance;}测试主程序#include#include#include#includeusingnamespacestd;intmain(){CSpdlog::GetInstance()->Init("test","./log");//初始化日志CSpdlog::GetInstance()->SetConsoleLogLevel(spdlog::level::debug);//设置终端接口输出级别CSpdlog::GetInstance()->SetFileLogLevel(spdlog::level::warn);//设置日志文件输出级别autologger=spdlog::get("test");//获取日志句柄logger->warn("teststart.");intcounter=0;while(1){logger->debug("debugmsg,counter:{}",counter);logger->info("infomsg,counter:{}",counter);logger->warn("warnmsg,counter:{}",counter);logger->error("errormsg,counter:{}",counter);logger->critical("criticalmsg,counter:{}",counter);logger->trace("tracemsg,counter:{}",counter);usleep(500000);}return0;}编译并运行我的通用Makefile#Generalmakefile#FiledirectoryDEBUG_DIR=.SRC_DIR=.INC_DIR=../spdlogSRC=$(wildcard$(SRC_DIR)/*.cpp)#SourcefileOBJS=$(patsubst$(SRC_DIR)/%.cpp,$(DEBUG_DIR)/%.o,$(SRC))#目标文件名TARGET=testINSTALL_PATH?=.#修改编译器ARCH?=CC=$(ARCH)gccCPP=$(ARCH)g++AR=$(ARCH)arSTRIP=$(ARCH)stripCFLAGS+=-Wall-std=c++11LDFLAGS+=-lpthreadCFLAGS+=$(foreachdir,$(INC_DIR),-I$(dir))all:$(TARGET)$(目标ET):$(OBJS)$(CPP)$(OBJS)-o$@$(CFLAGS)$(LDFLAGS)$(STRIP)$(TARGET)#cp$(TARGET)$(INSTALL_PATH)$(DEBUG_DIR)/%.o:$(SRC_DIR)/%.cpp$(CPP)$(CFLAGS)-c$<-o$@#@echo$(SRC)#@echo$(OBJS)清理:-rm$(OBJS)$(LIB_TARGET)编译makeg++-Wall-std=c++11-I.-I./spdlog-ccspdlog.cpp-ocspdlog.og++-Wall-std=c++11-I.-I./spdlog-cmain.cpp-omain.og++./cspdlog.o./main.o-otest-Wall-std=c++11-I.-I./spdlogstriptest运行console输出:日志输出文件输出:$catlog/test.txt[2021-08-1715:30:59:526][测试][tid:20418][警告]teststart。[2021-08-1715:30:59:527][测试][tid:20418][警告]warnmsg,counter:0[2021-08-1715:30:59:528][test][tid:20418][error]errormsg,counter:0[2021-08-1715:30:59:529][test][tid:20418][critical]criticalmsg,counter:0[2021-08-1715:31:00:031][test][tid:20418][warning]warnmsg,counter:0[2021-08-1715:31:00:032][test][tid:20418][error]errormsg,counter:0[2021-08-1715:31:00:032][test][tid:20418][critical]criticalmsg,counter:0[2021-08-1715:31:00:533][测试][tid:20418][警告]warnmsg,计数器:0[2021-08-1715:31:00:533][测试][tid:20418][错误]errormsg,计数器:0[2021-08-1715:31:00:534][测试][tid:20418][严重]criticalmsg,counter:0测试源码上传云地址:https://gitee.com/fensnote/demo_code/tree/master/cpp/spdlog

最新推荐
猜你喜欢