gpt4 book ai didi

c++ - 明确检查 boost::log 过滤器?

转载 作者:可可西里 更新时间:2023-11-01 16:06:11 26 4
gpt4 key购买 nike

我有一些琐碎的日志记录:

BOOST_LOG_TRIVIAL(trace) << make_trace_record();

现在 make_trace_record 是一个调用起来有点昂贵的函数(不要问为什么,它很复杂)。我只想在日志当前通过过滤时调用它。我怎样才能做到这一点?我看不到明确调用严重性过滤器的方法。

最佳答案

Boost.Log 预先过滤;因此,如果严重性不够高,则不会调用 make_trace_record()

为了设置普通记录器的严重性过滤器,调用:

boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::...
);

例如,下面的例子输出1,表明expensive()只被调用了一次:

Live On Coliru

#include <iostream>

#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>

int count = 0;

int expensive()
{
return ++count;
}

int main()
{
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= boost::log::trivial::warning
);

BOOST_LOG_TRIVIAL(error) << expensive();
BOOST_LOG_TRIVIAL(info) << expensive();

std::cout << count << '\n';

return 0;
}

打印:

[2018-05-21 14:33:47.327507] [0x00007eff37aa1740] [error]   1
1

如果想知道它是如何工作的,请查看:How does the "lazy evaluation" of Boost Log's trivial loggers work?

关于c++ - 明确检查 boost::log 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com