我在项目中使用Boost.Log 1.55.0,我确实想要更改boost::log::sources::severity_logger
实例的所有接收器的严重性过滤器。
以下是如何使用初始严重性过滤器设置一个接收器的示例:
void InitializeLogging(LogLevels const kLogLevel) const {
auto line_id = boost::log::expressions::attr<unsigned int>("LineID");
auto severity = boost::log::expressions::attr<LogLevels>("Severity");
auto timestamp = boost::log::expressions::format_date_time<boost::posix_time::ptime>(
"TimeStamp",
"%Y-%m-%d %H:%M:%S");
boost::log::formatter const kFormatter{
boost::log::expressions::stream
<< std::setw(6) << std::setfill('0') << line_id
<< std::setfill(' ')
<< ": " << timestamp
<< " [" << severity << "] "
<< boost::log::expressions::smessage};
using TextSink = boost::log::sinks::synchronous_sink<boost::log::sinks::text_ostream_backend>;
boost::shared_ptr<TextSink> sink = boost::make_shared<TextSink>();
boost::shared_ptr<std::ostream> stream(&std::clog, boost::empty_deleter());
sink->locked_backend()->add_stream(stream);
sink->set_filter(severity >= kLogLevel);
sink->set_formatter(kFormatter);
boost::log::core::get()->add_sink(sink);
boost::log::add_common_attributes();
}
所以当我通过成员函数set_filter
创建接收器时,我能够设置过滤,但我想知道如何修改过滤器的一个/多个/所有为Boost.Log核心配置的接收器。
答案 0 :(得分:1)
我自己找到了解决方案。因此,我将在此回答我的两个问题:
不可以通过调用Boost.Log核心上的函数set_filter
来设置所有接收器的过滤器。我使用以下函数作为自定义严重性日志级别:
void log_level(LogLevels const kLogLevel) {
boost::log::core::get()->set_filter(boost::log::expressions::attr<CustomLogLevels>("Severity") >= kLogLevel);
}
Sidenote :通过调用boost::log::core::get()->remove_all_sinks()
可以删除内核中的所有接收器,但在我的用例中没有必要。
答案 1 :(得分:0)
我发现以下是更改过滤器的简单方法:
在日志初始化期间执行以下设置:
boost::shared_ptr<file_sink> mSink;
mSink(new file_sink(keywords::file_name = "BoostLog_%Y%m%d_%3N.txt", keywords::rotation_size = 500 * 1024))
mSink->set_filter(severity >= error);
我使用原始过滤器记录了大量消息,然后使用以下内容将过滤器更改为新的严重性级别:
mSink->reset_filter();
mSink->set_filter(severity >= warning);
然后,日志记录会关注新的过滤器设置。