查看boost/log/sources/basic_logger.hpp头文件,basic_logger :: open_record_unlocked忽略了basic_composite_logger传递的参数。boost :: log :: sources :: basic_logger :: open_record_unlocked忽略参数
template< typename ArgsT >
record open_record_unlocked(ArgsT const&)
{
return m_pCore->open_record(m_Attributes);
}
当我穿过BOOST_LOG_WITH_PARAMETERS属性的属性永远不会进入过滤器或水槽。
图书馆如此重要的事情如此错误?这怎么不会发生在每个人身上?显然,我在这里做错了什么,但Boost代码是有罪的。这里是我的代码片段:
mylog.hpp
namespace Log
{
enum Severity
{
SPAM,
TRACE,
VERBOSE,
DEBUG,
INFO,
WARNING,
ERROR,
FATAL
};
namespace Attr
{
BOOST_PARAMETER_KEYWORD(Tag, Severity);
BOOST_PARAMETER_KEYWORD(Tag, Component);
} // namespace Attr
} // namespace Log
mylog.cpp
namespace SomeCode
{
namespace attr
{
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, Log::Attr::Tag::Severity::keyword_name(), Log::Severity);
BOOST_LOG_ATTRIBUTE_KEYWORD(component, Log::Attr::Tag::Component::keyword_name(), std::string);
} // namespace attr
class Foo
{
public:
Foo(const std::string& component)
{
m_Logger.add_attribute(attr::component.get_name(), boost::log::attributes::constant<attr::tag::component::value_type>(component));
}
void bar()
{
BOOST_LOG_WITH_PARAMS(m_Logger, (Log::Attr::Severity = Log::INFO)) << "Test";
}
private:
boost::log::sources::logger_mt m_Logger;
};
} // namespace SomeCode
int main()
{
SomeCode::Foo foo("main");
foo.bar();
return (0);
}
日志显示我的组件属性,但不严重,而且它也没有提供给过滤器。
谢谢。 open_record函数没有完全采用属性并不明显。这使我绊倒了。 – k001daddy