我希望调整严重性级别而不重新编译,因此我使用init_from_stream从文件中读取严重性级别。其他选项我不需要更改运行时,因此他们之前的设置是通过boost.log API完成的。
配置文件是:
[Core]
DisableLogging=false
Filter="%Severity% >= 0"
代码是:
std::ifstream file("log_setting.ini");
boost::log::init_from_stream(file);
boost::log::register_simple_formatter_factory< severity_level, char >("Severity");
// following is same as before(all setting is by calling API, and comment out severity settings)
boost::shared_ptr<boost::log::core> core = boost::log::core::get();
core->set_exception_handler(boost::log::make_exception_suppressor());
//add and set sinks
但是我发现init by file似乎与“传统API设置”是独占的,如果我添加init_from_stream
,则没有注销。
我的要求是使用设置文件来控制我需要更改运行时的一些参数部分,但不是全部。
答案 0 :(得分:1)
您需要在使用格式化程序解析器(在从设置文件解析格式化程序时使用)之前注册格式化程序工厂。
init_from_stream
函数并不是库函数的独有功能,但它几乎不适合日志记录设置的运行时更新。无论它在设置中识别出什么接收器,它都会添加到日志记录核心,无论这些接收器是否在之前添加。
您必须实现自己的机制来更新日志记录配置。您可以使用settings parser来阅读设置文件,但是您必须跟踪添加到核心的接收器并自行初始化设置容器中的接收器。