如何从配置中设置boost日志严重级别?
How do I set the boost logging severity level from config?
我希望能够从配置中指定日志严重性级别:
# my config file
LogSeverity = info
我该怎么做?目前,我在我的main
函数中有这样的东西:
// logging settings
boost::log::trivial::severity_level logSeverity;
boost::program_options::options_description loggingSettings
("Logging settings");
loggingSettings.add_options()
("LogSeverity", value<boost::log::trivial::severity_level>(&logSeverity)
->required(),
"log level to output");
variables_map vm;
store(parse_config_file(configFilestream, loggingSettings), vm);
notify(vm);
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= logSeverity);
BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity;
程序的输出是:
[2015-05-18 09:58:40.783298] [0x000007f017445078] [info] severity trace
但是,我在配置中将严重性设置为info
(如上所述),那么为什么它被设置为trace
呢?
完整示例:
default.conf:
# my config file
LogSeverity = info
main.cpp:
#include <string>
#include <fstream>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/program_options.hpp>
int main()
{
// logging settings
boost::log::trivial::severity_level logSeverity;
boost::program_options::options_description loggingSettings
("Logging settings");
loggingSettings.add_options()
("LogSeverity", boost::program_options::value<boost::log::trivial::severity_level>(&logSeverity)
->required(),
"log level to output");
std::ifstream conf_file("./default.conf");
if (!conf_file)
return 1;
boost::program_options::variables_map variables_map;
boost::program_options::store(boost::program_options::parse_config_file(conf_file, loggingSettings), variables_map);
boost::program_options::notify(variables_map);
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= logSeverity);
BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity;
return 0;
}
输出:[2015-05-19 01:22:57.666571] [0xc000027d] [info] severity info
问题似乎是您不能直接从program_options分配到boost::log::trivia::severity
类型。为了实现这一点,我将变量存储在std::string
中,然后使用>>
运算符将值输入severity
类型:
// logging settings
std::string logSeverityString;
boost::log::trivial::severity_level logSeverity;
boost::program_options::options_description loggingSettings
("Logging settings");
loggingSettings.add_options()
("LogSeverity", value<boost::log::trivial::severity_level>(&logSeverityString)
->required(),
"log level to output");
variables_map vm;
store(parse_config_file(configFilestream, loggingSettings), vm);
notify(vm);
std::istringstream{logSeverityString} >> logSeverity;
boost::log::core::get()->set_filter(
boost::log::trivial::severity >= logSeverity);
BOOST_LOG_TRIVIAL(info) << "severity " << logSeverity;
相关文章:
- boost日志文件无法创建sample.log文件
- 可视化如何在我的C++程序中最好地使用相同的Boost日志
- 使用cmake错误链接boost日志
- 磁盘已满时,Boost日志崩溃
- BOOST ::日志是每次运行应用程序时都可能旋转文件
- 如何使用 Boost V2 1.70 日志记录库在第一个索引(例如 logtrail01.txt)保留最新的日志文件名?
- boost ::日志 - 使用库/插件内的独立严重性级别
- BOOST BINOMIAL_COFEFIED的日志版本
- 使用boost ::日志配置文件变量
- boost::log关闭日志文件并打开一个新文件
- 如何通过 boost::log 打印到具有不同属性的不同日志?
- boost::从 DLL 调用时日志格式不起作用
- 输出用户定义的结构使用boost ::日志
- boost.log-一个日志文件的多个进程
- 如何设置boost.log以限制日志文件的数量
- Boost日志在链接到共享库时无法正常工作
- Boost日志链接器错误
- Boost日志:如何使用Boost_Log_GLOBAL_LOGGER_INIT指定同步接收器
- Boost.Log在每个日志记录语句之后刷新
- 为什么Boost日志记录器操作不是常量