学习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");