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
时:
- 所有级别的日志都会显示(包括
debug
、info
、warn
、error
等),因为debug
是最低级别。 - 典型用途:在开发阶段需要详细跟踪程序行为时使用。
示例代码
spdlog::set_level(spdlog::level::debug); // 允许所有日志输出
spdlog::debug("调试信息: {}", some_value); // 显示
spdlog::info("普通信息"); // 显示
spdlog::error("错误信息"); // 显示
3. 各级别的含义与用途
级别 | 数值 | 用途 | 是否显示(若级别设为 debug ) |
---|---|---|---|
trace | 0 | 超详细跟踪(比 debug 更细) | ✔️ |
debug | 1 | 调试信息(变量、流程等) | ✔️ |
info | 2 | 常规信息(如启动完成) | ✔️ |
warn | 3 | 警告(不影响运行的潜在问题) | ✔️ |
error | 4 | 错误(功能异常但程序可继续运行) | ✔️ |
critical | 5 | 严重错误(可能导致程序崩溃) | ✔️ |
off | 6 | 关闭所有日志 | ❌ |
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
日志。