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

使用BOOST_LOG_SEV打印日志无法正确输出自定义严重级别如何解决

问题根因

你遇到的两个问题分别对应两个不同的配置错误:

  1. 自定义日志级别始终显示info:你自定义了severity_level枚举,但没有为Boost.Log的格式化器注册该枚举的输出逻辑,Boost.Log无法识别你自定义的级别值,默认统一输出info
  2. 替换为trivial::severity_level编译报错:你的logger实例slg绑定的是你自定义的severity_level类型,和Boost.Log内置的trivial::severity_level是完全独立的两个枚举类型,类型不匹配自然无法转换

解决方案

方案1:继续使用自定义severity_level枚举

你需要为自定义级别添加输出运算符重载,并且在初始化sink的格式化器时指定读取自定义级别的属性:

  1. 在你自定义枚举的代码后添加输出重载和属性注册:
enum severity_level { trace, debug, info, warning, error, fatal };
// 新增以下内容
std::ostream& operator<<(std::ostream& os, severity_level level)
{
    static const char* level_strs[] = {
        "trace", "debug", "info", "warning", "error", "fatal"
    };
    if (static_cast<std::size_t>(level) < std::size(level_strs))
        os << level_strs[level];
    else
        os << static_cast<int>(level);
    return os;
}
// 注册到Boost.Log表达式系统
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level)

inline boost::log::sources::severity_logger<severity_level> slg;
  1. 修改你日志sink的格式化配置,使用自定义的severity关键字:
// 仅需替换你原有格式化器中级别对应的字段即可,示例如下
sink->set_formatter(
    boost::log::expressions::stream
        << "[" << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "]"
        << "[" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
        << "[" << severity << "]" // 此处用你注册的自定义severity关键字
        << boost::log::expressions::smessage
);

方案2:直接使用Boost.Log内置的trivial::severity_level

如果你不需要自定义级别规则,直接替换你自定义的枚举和logger声明即可,无需额外的格式化注册,原有日志打印逻辑完全不用修改:

// 删除你自己定义的severity_level枚举,替换为以下内容
using severity_level = boost::log::trivial::severity_level;
inline boost::log::sources::severity_logger<severity_level> slg;

该方案下编译错误会直接消失,内置的trivial级别自带默认格式化规则,可直接正确输出各级别名称。

内容的提问来源于stack exchange,提问作者There is nothing we can do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:09