Seb*_*anK 11 c++ logging boost boost-log
我正在使用boost 1.54.0.您可以在下面找到说明我的问题的最小示例.
我使用boost日志的severity_logger.我想从流中配置我的接收器.(在下面的示例中,我使用了一个字符串流.在我的实际应用程序中,流来自一个文件.)我想使用%Severity%来输出或过滤.
我的问题是:如果我在下面的例子中给出它,%Severity%为空.
%LineID%和%Message%按预期填充.如果我在outcommented行中设置了一个接收器,它会按预期工作.
有任何想法吗?
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <boost/log/expressions.hpp>
enum SeverityLevel { trace, fatal };
int main (int argc, char *argv[])
{
boost::log::add_common_attributes();
/*
struct severity_tag;
boost::log::add_console_log(std::clog,
boost::log::keywords::format = (
boost::log::expressions::stream
<< boost::log::expressions::attr< unsigned int >("LineID")
<< ": <" << boost::log::expressions::attr<SeverityLevel, severity_tag >("Severity")
<< "> " << boost::log::expressions::smessage)
); */
std::stringstream s;
s << "[Sinks.MySink]" << std::endl;
s << "Destination=Console" << std::endl;
s << "Format=\"%LineID%: <%Severity%> - %Message%\"" << std::endl;
boost::log::init_from_stream(s);
boost::log::sources::severity_logger<SeverityLevel> lg;
BOOST_LOG_SEV(lg, trace) << "This is a trace message";
BOOST_LOG_SEV(lg, fatal) << "This is a fatal message";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
nij*_*sen 10
你是对的.这是一个已知错误,已在当前开发版本中修复.
以下是错误报告:https://svn.boost.org/trac/boost/ticket/8840
为了使这个答案更少地依赖于链接,这是在报告中解决它的方式:
在解析设置文件之前,需要在库中注册严重性属性.看到这里.如果要根据严重性级别过滤记录,则可能必须为格式化程序和过滤器解析器注册该属性.
好的,这是有效的,但我必须添加一个流输入/提取功能,然后我必须在从设置文件加载设置之前添加以下两行:
logging::register_simple_formatter_factory<ESeverityLevel, char>("Severity");
logging::register_simple_filter_factory<ESeverityLevel, char>("Severity");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3310 次 |
| 最近记录: |