如何让drake::log()日志消息刷新输出以缩短响应延迟
drake::log() 日志快速刷新配置方案
drake 内置的日志工具底层基于 spdlog 实现,默认会启用输出缓冲来提升性能,你可以通过以下几种方式调整刷新策略降低延迟:
- 按日志级别触发自动刷新
在程序初始化阶段调用如下代码,只要产出对应级别及以上的日志就会立刻刷新到输出端:// 可根据实际需要替换为 trace/debug/info/warn/error/critical 级别 drake::log()->flush_on(spdlog::level::info); - 固定间隔自动刷新
配置全局定时刷新策略,不管缓存是否填满都会按固定间隔输出日志,适合日志产出频率不稳定的场景:// 示例设置为每秒刷新一次,可根据延迟需求调整时间间隔 spdlog::flush_every(std::chrono::seconds(1)); - 特定场景手动强制刷新
如果你只需要在部分关键日志打印后立刻输出,不希望修改全局策略增加性能开销,可以在打印对应日志后主动调用刷新接口:drake::log()->info("你的关键日志内容"); drake::log()->flush();
补充说明:如果你的日志是输出到文件,系统层面的文件流缓存也可能带来延迟,上述配置对终端输出、文件输出两类场景均生效。如果调整后仍然存在数分钟的延迟,可以排查是否有上层封装、进程重定向等环节对输出流做了额外的缓存处理。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

