spd log 日志库 debug日志

spdlog::set_level(spdlog::level::debug)spdlog::debug()spdlog 日志库中的功能,用于控制日志的输出级别。以下是详细解释:


1. Debug 模式的作用

  • 开发阶段
    debug 级别的日志用于输出详细的调试信息(如变量值、流程跟踪、条件分支等),帮助开发者诊断问题。
    spdlog::debug("Loading config file: {}", file_path);  // 打印调试信息
    
  • 运行时
    这些日志通常包含对开发者有用、但对用户无用的信息(比如内部状态、循环次数等)。

2. 发布时如何禁用 Debug 日志

  • 方法一:全局设置日志级别
    通过将日志级别设为 info 或更高,debug 日志会自动被过滤,不再输出或写入文件:

    spdlog::set_level(spdlog::level::info);  // 只有 info/warn/error 会显示
    
    • debug < info < warn < error < critical < off
  • 方法二:编译时移除(性能最优)
    在发布版本中,可以通过宏定义完全移除 Debug 日志的代码(减少二进制体积和运行时开销):

    #define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO  // 在包含 spdlog.h 前定义
    #include <spdlog/spdlog.h>
    

    此时所有 SPDLOG_DEBUG() 宏会在编译阶段被移除。


3. 关键区别

场景debug 日志状态性能影响
开发环境显示轻微
发布环境(设置级别)不显示,但代码仍存在极轻微
发布环境(宏定义)完全移除

4. 最佳实践

  • 开发阶段:保持 debug 级别,输出详细日志。
  • 发布阶段
    • 如果仍需动态调整日志级别:用 set_level(spdlog::level::info)
    • 如果完全不需要调试日志:通过 SPDLOG_ACTIVE_LEVEL 宏移除。

这样既能保证开发便利性,又能优化发布版本的性能。

1. set_level 的作用

spdlog::set_level() 用于设置日志库的全局过滤级别,只有等于或高于该级别的日志才会被输出(显示到控制台、文件等)。低于该级别的日志会被直接忽略。

示例
spdlog::set_level(spdlog::level::info);  // 设置全局级别为 info
  • 生效规则
    debug < info < warn < error < critical < off
    设成 info 后,debug 日志不显示,而 info/warn/error 等会显示。

2. Debug Level 的显示范围

当设置为 spdlog::level::debug 时:

  • 所有级别的日志都会显示(包括 debuginfowarnerror 等),因为 debug 是最低级别。
  • 典型用途:在开发阶段需要详细跟踪程序行为时使用。
示例代码
spdlog::set_level(spdlog::level::debug);  // 允许所有日志输出

spdlog::debug("调试信息: {}", some_value);   // 显示
spdlog::info("普通信息");                    // 显示
spdlog::error("错误信息");                   // 显示

3. 各级别的含义与用途

级别数值用途是否显示(若级别设为 debug
trace0超详细跟踪(比 debug 更细)✔️
debug1调试信息(变量、流程等)✔️
info2常规信息(如启动完成)✔️
warn3警告(不影响运行的潜在问题)✔️
error4错误(功能异常但程序可继续运行)✔️
critical5严重错误(可能导致程序崩溃)✔️
off6关闭所有日志

4. 实际场景中的用法

场景 1:开发阶段
spdlog::set_level(spdlog::level::debug);  // 显示所有日志
spdlog::debug("正在初始化模块A...");       // 开发时查看细节

输出结果

[2023-01-01 12:00:00] [debug] 正在初始化模块A...
场景 2:发布阶段
spdlog::set_level(spdlog::level::info);  // 屏蔽 debug 日志
spdlog::debug("这条日志不会显示");        // 被过滤
spdlog::info("程序启动完成");            // 显示

输出结果

[2023-01-01 12:00:00] [info] 程序启动完成

5. 性能建议

  • 开发环境:设为 debug 级别,便于排查问题。
  • 生产环境:设为 info 或更高,避免冗余日志影响性能。
  • 彻底禁用 Debug:通过宏 SPDLOG_ACTIVE_LEVEL 在编译时移除代码(见前文解释)。

总结

  • set_level:动态控制日志输出的过滤级别。
  • debug level:显示所有日志(包括 debug 本身),适用于开发调试。
  • 发布时:通过提高级别(如 info)或编译优化屏蔽 debug 日志。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值