2016-01-07 26 views
0

是否有任何方法在syslog后端flush()。我正面临升压系统日志接收器的问题,在第6条日志消息之后,第7条消息没有被记录到syslog中(保持在缓冲区中),直到调用新的日志消息。自动刷新升压系统日志接收器后端(升压1.59)

我的系统日志执行:

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

,但它并没有帮助,仍然将日志信息不及时登录由住在缓冲区中。

回答

0

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

由于您使用的是本机syslog实现,因此您应该查看一下syslog守护进程如何操作以及是否有任何方式强制刷新其内部缓冲区。这不能从Boost.Log方面完成。

+0

谢谢安德烈。我会检查本机冲洗。 – SGPJ