spdlog

spdlog 是一个 header-only 的日志库,提供了一下能力:

  • 基于 fmt 的字符串格式化

  • 日志分级

  • 日志轮转

设置日志级别

可以使用 map 来简化日志级别的设置:

void SetLogger(std::string const& level, bool terminal) {
   using namespace spdlog;
   spdlog::level::level_enum l = spdlog::level::debug;

   std::map<std::string, spdlog::level::level_enum> str2level = {
      { "trace", level::level_enum::trace },
      { "debug", level::level_enum::debug },
      { "info", level::level_enum::info },
      { "err", level::level_enum::err },
      { "warn", level::level_enum::warn },
      { "critical", level::level_enum::critical },
      { "off", level::level_enum::off }
   };

   if(str2level.find(level)!=str2level.end()) {
      set_level(str2level[level]);
   }
}

logger

spdlog 提供了丰富的 logger,不同的 logger 具备不同的功能,例如:

std::shared_ptr<> console_logger = spdlog::stdout_color_mt("console");
std::shared_ptr<> err_logger = spdlog::stderr_color_mt("stderr");
// 文件 logger
std::shared_ptr<> file_logger = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt");
// 轮转文件 logger
auto max_size = 1024 * 1024 * 5; // 5 MB
auto max_files = 3;
std::shared_ptr<> rotating_logger = spdlog::rotating_logger_mt("some_logger_name", "logs/rotating.txt", max_size, max_files);
// 每日文件 logger
std::shared_ptr<> daily_logger spdlog::daily_logger_mt("daily_logger", "logs/daily.txt", 2, 30);
// syslog logger
std::shared_ptr<> syslog_logger spdlog::syslog_logger_mt("syslog", ident, LOG_PID);
// Android logger
 auto android_logger = spdlog::android_logger_mt("android", tag);

在创建新的 logger 后可以将其设置为默认的 logger:

std::shared_ptr<> logger = spdlog::get("basic_logger");
spdlog::set_default_logger(logger);

可以设置 logger 的刷新频率:

spdlog::flush_every(std::chrono::seconds(3));

异步日志:

// spdlog::init_thread_pool(8192, 1); // queue with 8k items and 1 backing thread.
auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async_log.txt");
Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx