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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03