syslog后端是否有flush()方法。我面临着升级系统日志接收器的问题,在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-&GT;冲洗();
使用flush()方法但它没有帮助,并且仍然没有及时记录消息,因为它们保留在缓冲区中。
答案 0 :(得分:0)
Boost.Log中的syslog后端没有auto_flush
方法,因为后端不会缓冲格式化的记录。此后端的flush
方法与synchronous_sink
前端相结合,基本上是一个无操作方法,并提供跨所有接收器的接口统一。
由于您正在使用本机syslog实现,因此您应该了解syslog守护程序的运行方式以及是否有任何方法可以强制它刷新其内部缓冲区。这不能从Boost.Log方面完成。