【问题标题】:auto flush in boost syslog sink backend (boost 1.59)在 boost syslog sink 后端自动刷新(boost 1.59)
【发布时间】:2016-04-11 19:25:51
【问题描述】:

在 syslog 后端有什么方法可以刷新()。我遇到了 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() 方法

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

【问题讨论】:

    标签: c++ boost boost-log


    【解决方案1】:

    Boost.Log 中的 syslog 后端没有 auto_flush 方法,因为后端不缓冲格式化记录。此后端的 flush 方法与 synchronous_sink 前端结合使用基本上是无操作的,并且提供了跨所有接收器的接口统一。

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

    【讨论】:

    • 谢谢安德烈。我会用本机检查冲洗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多