在 boost syslog 接收器后端自动刷新(boost 1.59)

auto flush in boost syslog sink backend (boost 1.59)

系统日志后端是否有 flush() 方法。我面临 boost syslog sink 的问题,在 6 条日志消息之后,第 7 条消息不会登录到 syslog(保留在缓冲区中),直到调用新的日志消息。

我的系统日志实现:

 typedef sinks::synchronous_sink< sinks::syslog_backend > sink_t;
    boost::shared_ptr< sink_t > syslogSink(
            new sink_t(
            keywords::facility = sinks::syslog::local0,
            keywords::use_impl = sinks::syslog::native
    ));
   sinks::syslog::custom_severity_mapping< std::string > mapping("severityLevel");
        mapping["debug"] = sinks::syslog::debug;
        mapping["info"] = sinks::syslog::info;
        mapping["notice"] = sinks::syslog::info;
        mapping["warning"] = sinks::syslog::warning;
        mapping["error"] = sinks::syslog::error;
        mapping["critical"] = sinks::syslog::critical;
        syslogSink->locked_backend()->set_severity_mapper(mapping);
        syslogSink->locked_backend()->auto_flush(m_logAutoFlush);
        logging::formatter formatter = CEFFormat();
        syslogSink->set_formatter(formatter);
        syslogSink->set_filter(expr::attr<std::string>("Channel") == "signatureID");
        logging::core::get()->add_sink(syslogSink);

syslogSink->flush();

我尝试按照 http://www.boost.org/doc/libs/1_59_0/libs/log/doc/html/boost/log/sinks/synchronous_sink.html#idp54313520-bb

使用 flush() 方法

但这并没有帮助,仍然没有通过留在缓冲区中及时记录日志消息。

Boost.Log 中的系统日志后端没有 auto_flush 方法,因为后端不缓冲格式化记录。此后端的 flush 方法与 synchronous_sink 前端结合使用基本上是一个 no-op 并提供跨所有接收器的接口统一。

由于您使用的是本机 syslog 实现,因此您应该查看 syslog 守护程序的运行方式,以及是否有任何方法可以强制它刷新其内部缓冲区。这不能从 Boost.Log 端完成。