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

如何设置Boost Log库的日志严重级别,解决相关编译错误

错误原因

该报错由两个问题共同导致:

  1. 缺失日志表达式相关头文件,trivial日志的severity属性关键字未被正确引入
  2. 静态链接Boost Log时未添加必填的预编译宏,同时缺失必要的log_setup组件依赖

解决步骤

1. 修复代码逻辑

补充缺失的头文件,修正过滤器写法,修改后代码如下:

#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
// 新增日志表达式头文件
#include <boost/log/expressions.hpp>

namespace logging = boost::log;

void init()
{
    logging::core::get()->set_filter
    (
        // 正确声明severity属性的类型和名称
        logging::expressions::attr<logging::trivial::severity_level>("Severity") >= logging::trivial::info
    );
}

注意:需要在main函数最开头、输出任意日志之前调用init()函数,过滤规则才会生效

2. 修正CMake配置

修改CMakeLists.txt,补充预编译宏和缺失的依赖组件:

SET(Boost_USE_STATIC_LIBS ON)
# 新增log_setup依赖组件
find_package(Boost 1.71 COMPONENTS log log_setup graph REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})

# 新增静态链接Boost Log必填的预编译宏
add_definitions(-DBOOST_ALL_NO_LIB)
add_definitions(-DBOOST_LOG_DYN_LINK=0)
add_definitions(-DBOOST_LOG_USE_CHAR)

add_executable(ls_router main.cpp)
target_link_libraries(ls_router PUBLIC ${Boost_LIBRARIES} pthread)

3. 验证效果

修改后重新执行cmake . && make编译即可解决报错,可通过以下测试代码验证过滤规则生效:

int main()
{
    init();
    BOOST_LOG_TRIVIAL(debug) << "调试日志,不会输出";
    BOOST_LOG_TRIVIAL(info) << "信息日志,正常输出";
    return 0;
}

内容的提问来源于stack exchange,提问作者immutableT

相关产品推荐
方舟 Agent Plan

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

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