自版本39cdd08开始,spdlog在记录日志时不会抛出异常。
在构造日志记录器或sink时可能会抛出异常,因为这被认为是致命的。
如果在记录日志期间发生错误,该库将向stderr打印错误消息。为了避免屏幕被大量错误消息淹没,每个日志记录器的错误消息打印速率被限制为每分钟1条。
可以通过调用spdlog::set_error_handler(new_handler_fun)或logger->set_error_handler(new_handler_fun)来更改此行为:
全局更改错误处理程序:
spdlog::set_error_handler([](const std::string& msg) {
std::cerr << "my err handler: " << msg << std::endl;
});
对于特定的日志记录器:
critical_logger->set_error_handler([](const std::string& msg) {
throw std::runtime_error(msg);
});
默认的错误处理程序 `_default_err_handler` 将使用以下方式打印错误:
fmt::print(stderr, "[*** LOG ERROR ***] [{}] [{}] {}\n", date_buf, name(), msg);