2016-01-07 49 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