如何获取当前spdlog日志级别?实现临时关闭后恢复原级别
获取spdlog当前日志级别并临时修改恢复的方案
其实实现这个需求很简单,spdlog给我们提供了直接获取当前日志级别的方法,我给你一步步拆解:
1. 获取当前日志级别
不管你用的是默认logger还是自定义的logger实例,都可以通过level()方法拿到当前的日志级别,它返回的是spdlog::level::level_enum枚举类型(比如spdlog::level::info、spdlog::level::debug这些)。
举个例子:
- 如果你用的是默认logger:
// 获取默认logger的当前级别 spdlog::level::level_enum original_level = spdlog::default_logger()->level();
- 如果你有自定义的logger(比如名字叫"my_logger"):
auto my_logger = spdlog::get("my_logger"); spdlog::level::level_enum original_level = my_logger->level();
2. 临时修改日志级别并恢复
拿到原有级别后,你就可以临时把日志级别调整到需要的状态(比如改成spdlog::level::off来关闭日志输出),执行完目标代码后再把级别改回去就行。
完整的代码示例:
#include "spdlog/spdlog.h" int main() { // 初始化默认logger(示例用,实际项目可能已经初始化过) spdlog::set_level(spdlog::level::info); spdlog::info("这是修改前的info日志"); // 1. 保存当前日志级别 auto original_level = spdlog::default_logger()->level(); // 2. 临时修改日志级别为off(关闭所有日志输出) spdlog::default_logger()->set_level(spdlog::level::off); spdlog::info("这条日志不会被输出"); // 执行你需要屏蔽日志的代码逻辑 // ... // 3. 恢复原有日志级别 spdlog::default_logger()->set_level(original_level); spdlog::info("日志级别恢复后,这条info日志会正常输出"); return 0; }
注意事项
- 如果你的项目里用到了多个logger实例,一定要针对对应logger进行级别保存和修改,不要只操作默认logger,不然会漏掉其他logger的日志控制。
- 在多线程环境下,修改日志级别最好加个锁(比如用
std::lock_guard),避免其他线程同时修改级别导致恢复出错。比如:
std::mutex log_mutex; { std::lock_guard<std::mutex> lock(log_mutex); auto original_level = spdlog::default_logger()->level(); spdlog::default_logger()->set_level(spdlog::level::off); // 执行代码 spdlog::default_logger()->set_level(original_level); }
内容的提问来源于stack exchange,提问作者Howaida Khoureieh
相关产品推荐
相关产品推荐

