https://github.com/gabime/spdlog
C++ 通用日志打印,msvc OutputDebug、log file以及控制台console的输出 , 支持日志轮转。
只需要引用头
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h" // or "../stdout_sinks.h" if no color needed
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/msvc_sink.h"
日志打印配置
通过函数设置msvc OutputDebug、log file以及控制台console的输出
/
// SPDLOGGER SETTING
/
void setLogger(std::string app_name, std::string log_path, std::size_t max_size, std::size_t max_file)
{
spdlog::drop_all();
auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
console_sink->set_level(spdlog::level::trace);
//console_sink->set_pattern("[multi_sink_example] [%^%l%$] %v");
console_sink->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%n] [tid: %t] [%l] %v%$");
#ifdef WIN32
auto msvc_sink = std::make_shared<spdlog::sinks::msvc_sink_mt>(false);
msvc_sink->set_pattern("[%Y-%m-%d %H:%M:%S:%e] [%n] [tid: %t] [%l] %v");
msvc_sink->set_level(spdlog::level::trace);
#endif
std::vector<spdlog::sink_ptr> m_sinks;
m_sinks.push_back(console_sink);
#ifdef WIN32
m_sinks.push_back(msvc_sink);
#endif
if (0 < log_path.length()) {
auto file_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>(log_path, 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::trace);
m_sinks.push_back(file_sink);
}
spdlog::logger logger(app_name, begin(m_sinks), end(m_sinks));
logger.set_level(spdlog::level::trace);
auto new_logger = std::make_shared<spdlog::logger>(logger);
spdlog::register_logger(new_logger);
//auto new_logger = spdlog::basic_logger_mt("new_default_logger", "logs/new-default-log.txt", true);
spdlog::set_default_logger(new_logger);
spdlog::set_level(spdlog::level::trace);
}
配置
LoggerSettingInit("AppName", ""); // 不输出到文件中
LoggerSettingInit("AppName", "App.log"); // 输出到文件App.log
后面两个参数是日志轮转的单个日志最大大小和最大文件大小
使用spdlog输出日志
spdlog::error("Error: param number error.");
spdlog::error("Catch Exception in {} {}, msg:: {}", __FILE__, __LINE__, e.what());
spdlog::error("Catch Exception in {} {}", __FILE__, __LINE__);
spdlog::error("{} :: exception - {}", __FUNCTION__, e.what());
spdlog::error("{} :: exception", __FUNCTION__);
spdlog::error("{} :: : 0x{:08x}.", __FUNCTION__, hr);