学习spdlog的一些记录
项目下载
git clone https://github.com/gabime/spdlog.git
创建异步日志器
void initSpdlog(const std::string& strPath)
{
std::string strLogPath = strPath + "/logs/skyense.log";
// 异步就一定需要线程或线程池+日志队列,这里给一个线程,队列1024个字节
// spdlog::init_thread_pool(1024 , 1);
// 创建一个回滚日志,这里使用了工厂,类型是异步工厂,参数:日志名称、路径、文件大小、文件个数
// file_logger = spdlog::rotating_logger_mt<spdlog::async_factory>("file_logger", strLogPath , 1024 * 1024 * 5, 5);
// 需要输出日志的等级
// file_logger->set_level(spdlog::level::info);
// spdlog::flush_every(std::chrono::seconds(1));
// file_logger->set_pattern("[%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%t] [%s %!:%#] %v");
// 回收
// spdlog::drop_all();
//获取某个日志器
// spdlog::get("file_logger")->info("loggers can be retrieved from a global");
// 异步就一定需要线程或线程池+日志队列,这里给一个线程,队列1024个字节
spdlog::init_thread_pool(1024 , 1);
auto formatter = std::make_unique<spdlog::pattern_formatter>();
auto async_log_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(strLogPath , 1024 * 1024 * 5 , 5);
formatter->add_flag<Skyense_formatter_flag>('*').set_pattern("[%*] [%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%P] [thread %t] [%s %!:%#] %v");
async_log_sink->set_formatter(std::move(formatter));
std::vector<spdlog::sink_ptr> sinks;
sinks.push_back(std::move(async_log_sink));
//
auto stdout_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
stdout_sink->set_pattern("[%n] [%Y-%m-%d %H:%M:%S.%e] [%l] [%P] [thread %t] [%s %!:%#] %v");
sinks.push_back(std::move(stdout_sink));
//
auto logger_skyense = std::make_shared<spdlog::async_logger>("skyense", sinks.begin(), sinks.end() , spdlog::thread_pool());
logger_skyense->set_level(spdlog::level::info);
logger_skyense->flush_on(spdlog::level::warn);
spdlog::flush_every(std::chrono::seconds(3));
spdlog::register_logger(std::move(logger_skyense));
}
使用
直接通过名字获取到日志对象(spdlog创建的时候已经在全局创建,内部通过单例实现)
SPDLOG_LOGGER_ERROR(spdlog::get("skyense"),"Send Sn Arm failed");
文章评论