C++ 使用配置文件时,Boost日志不显示严重性或按严重性筛选
我一直在尝试使用以下命令使Boost日志库与配置文件一起工作:C++ 使用配置文件时,Boost日志不显示严重性或按严重性筛选,c++,boost-log,C++,Boost Log,我一直在尝试使用以下命令使Boost日志库与配置文件一起工作: boost::log::init_from_stream(); 方法。我使用: BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level) 方法来注册严重性,但这似乎没有任何作用。当我运行代码时,我得到以下输出: 1.[]定期的信息 2.[]警告严重性消息 3.[]错误严重性消息 i、 e.严重性缺失。当我添加这行代码时: boost::log::regis
boost::log::init_from_stream();
方法。我使用:
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", severity_level)
方法来注册严重性,但这似乎没有任何作用。当我运行代码时,我得到以下输出:
1.[]定期的信息
2.[]警告严重性消息
3.[]错误严重性消息
i、 e.严重性缺失。当我添加这行代码时:
boost::log::register_simple_formatter_factory< severity_level, char >("Severity");
boost::log::register\u simple\u formatter\u factory(“severity”);
它按预期工作,即它按上述方式记录,但具有严重性级别。但是,当我在配置文件中尝试按严重性筛选时,它不起作用,并且没有任何内容写入该文件,这意味着筛选器不知道“严重性”是什么,因此没有与此筛选器匹配的记录
如何让Boost日志使用init\u from\u stream方法处理严重性和过滤严重性?
以下是完整的源代码:(改编自Andrey Semashev)
enum严重性\u级别
{
正常,,
通知,
警告
错误,
批评的
};
std::ostream和操作符(级别)lg\U l;
您应该添加的BOOST_LOG_SEV(lg_l,normal)
boost::log::register_simple_formatter_factory< severity_level, char >("Severity");
boost::log::register\u simple\u formatter\u factory(“severity”);
在调用前的main函数中添加公共属性方法。
问候。因此答案最终来自添加:
boost::log::register_simple_formatter_factory< severity_level, char >("Severity");
通过添加以下运算符重载来解决此问题:
template< typename CharT, typename TraitsT >
inline std::basic_istream< CharT, TraitsT >& operator>> (
std::basic_istream< CharT, TraitsT >& strm, severity_level& lvl)
{
int n = normal;
strm >> n;
if (n >= normal && n <= critical)
lvl = static_cast< severity_level >(n);
else
lvl = normal;
return strm;
}
template
内联std::basic_istream和operator>>(
std::基本\u istream<图表、追踪>&标准、严重程度\u级别和lvl)
{
int n=正常;
strm>>n;
如果(n>=正常值&&n(n);
其他的
lvl=正常;
返回strm;
}
在此处找到:。我认为其他筛选可能需要其他运算符重载,并且可以在此处找到相关信息:嘿,非常感谢您的回复。我尝试了这一点,但得到了以下错误:错误:“sizeof”对不完整类型“boost::STATIC\u ASSERTION\u FAILURE”的应用无效。您有任何id吗这意味着什么。我整个上午都在谷歌上搜索,没有找到任何解决办法。
‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE
template< typename CharT, typename TraitsT >
inline std::basic_istream< CharT, TraitsT >& operator>> (
std::basic_istream< CharT, TraitsT >& strm, severity_level& lvl)
{
int n = normal;
strm >> n;
if (n >= normal && n <= critical)
lvl = static_cast< severity_level >(n);
else
lvl = normal;
return strm;
}