日志过滤
严重级别可以使日志信息更加翔实,但通常也会成为筛选器用来过滤日志记录的工具。在Log库的core里面可以通过设置全局过滤器很容易地做到日志过滤,就像下面一样:
#include <iostream>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
void init()
{
boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::info);
}
int main(int, char*[])
{
init();
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
system("pause");
return 0;
}
现在运行代码后前两个日志将被忽略,而后面四个日志会在控制台输出。这是因为我们筛选了严重级别大于boost::log::trivial::info的日志。
【重要】请记住,流表达式只会执行那些通过了过滤的结果。绝对不要在流表达式上指定关键业务的调用,因为如果日志被过滤掉了,这些调用必定不能被调用。
在调用set_filter函数时,其左侧的参数是一个占位符,描述要检查的属性。右侧的参数是要对照检查的值。boost::log::trivial::severity关键字是由Log库提供的占位符,此占位符表示严重级别的属性值。右侧的参数是Log库的枚举类型severity_level,第一节中有提到。然后表达式通过>=运算符过滤掉了严重等级小于boost::log::trivial::info的日志信息,最终将结果输出到控制台上。你也可以构建更复杂的过滤器,结合逻辑判断相互搭配,甚至还可以定义自己的过滤函数。
时间: 2024-10-08 15:47:35