如何设置Boost Log库的日志严重级别,解决相关编译错误
错误原因
该报错由两个问题共同导致:
- 缺失日志表达式相关头文件,trivial日志的
severity属性关键字未被正确引入 - 静态链接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
相关产品推荐
相关产品推荐

