Boost.Log使用syslog后端进行异步日志记录

问题描述 投票:0回答:1

我正在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;

但是在init()中,当我使用此定义创建后端并添加到logging :: core时,发生了错误。

// 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:在实例化‘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:从这里需要/usr/include/boost/log/sinks/async_frontend.hpp:230:31:错误:否调用的匹配功能‘boost :: log :: v2_mt_posix :: sinks :: unbounded_ordering_queue>> :: unbounded_ordering_queue()”m_FlushRequested(false)

我如何拥有一个带有syslog后端的异步记录器?

谢谢。

c++ asynchronous logging boost syslog
1个回答
0
投票

您需要在接收器构造函数的keywords::order命名参数中提供一个排序谓词。假定您使用logging::attribute_value_ordering,则应在构造谓词时指定要基于其排序日志记录的属性名称。例如:

keywords::order = logging::attribute_value_ordering< unsigned int, std::less< unsigned int > >("RecordID")
© www.soinside.com 2019 - 2024. All rights reserved.