如何使用spdlog为输出文本设置背景色?
spdlog 实现 fmt 风格终端颜色输出方案
spdlog 底层基于 fmt 库实现,v1.9.0 及以上版本原生支持 fmt 的风格化输出能力,可以完全替代手动编写 ANSI 转义序列的不规范写法,实现和 fmt::print 完全一致的效果。
实现代码
首先引入必要头文件:
#include <spdlog/spdlog.h> #include <fmt/color.h>
直接调用写法
// 样式参数和fmt::print完全一致,不需要手动写转义码 spdlog::info("{}", fmt::format( bg(fmt::terminal_color::yellow) | fg(fmt::terminal_color::black), fmt::format("{:<{}}", "message", 120) ));
封装简化写法
如果需要高频使用同一样式,可以封装为通用函数减少冗余代码:
template<typename... Args> void styled_log(std::string_view fmt_str, Args&&... args) { const auto style = bg(fmt::terminal_color::yellow) | fg(fmt::terminal_color::black); spdlog::info("{}", fmt::format(style, fmt::format(fmt_str, std::forward<Args>(args)...))); } // 调用和原生spdlog接口一致 styled_log("{:<{}}", "message", 120);
注意事项
- 低于 v1.9.0 的 spdlog 版本需要先升级库版本,才可支持 fmt 风格化对象的输出
- 不需要全局修改 spdlog 输出模式即可生效,无需额外调用
spdlog::set_pattern("%v") - 该写法会自动适配不同终端的颜色支持能力,跨平台兼容性远高于手动写 ANSI 转义序列的方案
内容的提问来源于stack exchange,提问作者André Agenor
相关产品推荐
相关产品推荐

