Boost.Log 使用 syslog 后端进行异步日志记录
Boost.Log asynchronous logging with syslog backend
我正在 Boost.log 上实现一个包装器来记录同步和异步方式。如下所示,我用 syslog_backend
定义了异步接收器前端。
typedef sinks::asynchronous_sink<
sinks::syslog_backend,
sinks::unbounded_ordering_queue<
logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >
>
> Async_syslog_sink;
但是当我使用这个定义创建后端并添加到logging::core时,在init()中发生了错误。
// Create a backend
boost::shared_ptr< Async_syslog_sink > sink(new Async_syslog_sink(
keywords::facility = sinks::syslog::user,
keywords::use_impl = sinks::syslog::native
));
sink->set_formatter(&my_formatter);
logging::core::get()->add_sink(sink);
错误是:
/usr/include/boost/log/sinks/async_frontend.hpp: In instantiation of
‘boost::log::v2_mt_posix::sinks::asynchronous_sink::asynchronous_sink(bool) [with SinkBackendT =
boost::log::v2_mt_posix::sinks::syslog_backend; QueueingStrategyT =
boost::log::v2_mt_posix::sinks::unbounded_ordering_queue > >]’:
/root/sample-logger/src/Loggers/Async/AsyncLogger.h:314:9:
required from here
/usr/include/boost/log/sinks/async_frontend.hpp:230:31: error: no
matching function for call to
‘boost::log::v2_mt_posix::sinks::unbounded_ordering_queue > >::unbounded_ordering_queue()’
m_FlushRequested(false)
我怎样才能拥有带有 syslog 后端的异步记录器?
谢谢。
您需要在接收器构造函数的 keywords::order
命名参数中提供排序谓词。鉴于您使用 logging::attribute_value_ordering
,您应该在构造谓词时指定要根据其对日志记录进行排序的属性名称。例如:
keywords::order = logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >("RecordID")
我正在 Boost.log 上实现一个包装器来记录同步和异步方式。如下所示,我用 syslog_backend
定义了异步接收器前端。
typedef sinks::asynchronous_sink<
sinks::syslog_backend,
sinks::unbounded_ordering_queue<
logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >
>
> Async_syslog_sink;
但是当我使用这个定义创建后端并添加到logging::core时,在init()中发生了错误。
// Create a backend
boost::shared_ptr< Async_syslog_sink > sink(new Async_syslog_sink(
keywords::facility = sinks::syslog::user,
keywords::use_impl = sinks::syslog::native
));
sink->set_formatter(&my_formatter);
logging::core::get()->add_sink(sink);
错误是:
/usr/include/boost/log/sinks/async_frontend.hpp: In instantiation of ‘boost::log::v2_mt_posix::sinks::asynchronous_sink::asynchronous_sink(bool) [with SinkBackendT = boost::log::v2_mt_posix::sinks::syslog_backend; QueueingStrategyT = boost::log::v2_mt_posix::sinks::unbounded_ordering_queue > >]’: /root/sample-logger/src/Loggers/Async/AsyncLogger.h:314:9:
required from here /usr/include/boost/log/sinks/async_frontend.hpp:230:31: error: no matching function for call to ‘boost::log::v2_mt_posix::sinks::unbounded_ordering_queue > >::unbounded_ordering_queue()’ m_FlushRequested(false)
我怎样才能拥有带有 syslog 后端的异步记录器?
谢谢。
您需要在接收器构造函数的 keywords::order
命名参数中提供排序谓词。鉴于您使用 logging::attribute_value_ordering
,您应该在构造谓词时指定要根据其对日志记录进行排序的属性名称。例如:
keywords::order = logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >("RecordID")