Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用配置文件时,Boost日志不显示严重性或按严重性筛选_C++_Boost Log - Fatal编程技术网

C++ 使用配置文件时,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日志库与配置文件一起工作:

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;
}