You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:47