spdlog日志库的模板封装
关于spdlog的基本介绍,可以查看GitHub官方介绍,这里不做过多阐述。主要集中于将spdlog用C++11的特性进行一个封装,简化使用或替换旧工程的日志库。spdlog库在不同文件使用的时候,为避免每个文件都需要重新定义一下。所以可把它封装在一个log.h的头文件中,这样,就可以直接使用了。这里使用了单例的设计模式,避免重复创建。同时,使用了可变参数模板,将参数传入WriteLog通过完美转
·
关于spdlog的基本介绍,可以查看GitHub官方介绍,这里不做过多阐述。主要集中于将spdlog用C++11的特性进行一个封装,简化使用或替换旧工程的日志库。
spdlog库在不同文件使用的时候,为避免每个文件都需要重新定义一下。所以可把它封装在一个log.h
的头文件中,这样,就可以直接使用了。
这里使用了单例的设计模式,避免重复创建。同时,使用了可变参数模板,将参数传入WriteLog
通过完美转发std::forward
到spdlog里面,因为spdlog本身也是一个可变参数模板。
#pragma once
#include <string>
// spdlog日志库
#include "E:/GitRepo/spdlog/include/spdlog/spdlog.h"
#include "E:/GitRepo/spdlog/include/spdlog/sinks/rotating_file_sink.h"
class loggers
{
public:
static loggers& GetInstance();
std::shared_ptr<spdlog::logger> sWriteLog;
private:
loggers();
};
loggers& loggers::GetInstance()
{
static loggers mLogger;
return mLogger;
}
loggers::loggers()
{
std::string logPath("testlog.log");
sWriteLog = spdlog::rotating_logger_mt("main", logPath, 1024 * 1024 * 5, 3);
}
template < typename ...Args>
void WriteLog(Args ...var)
{
auto log = loggers::GetInstance();
log.sWriteLog->info(std::forward<Args>(var)...);
}
如何使用如下:
//main.cpp
#include "log.h"
#include <iostream>
int main()
{
WriteLog("test");
WriteLog("test one {}", 123);
spdlog::info("display on console");
return 0;
}
可以看到,也可以直接使用spdlog::info("display on console");
在终端显示信息。
这里只是一个简单的封装思路,还可以再进一步扩展。
更多推荐
所有评论(0)