Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Boost日志回调_Boost_Boost Log - Fatal编程技术网

Boost日志回调

Boost日志回调,boost,boost-log,Boost,Boost Log,我已经基于创建了一个记录器机制 我的代码基于本文所示的普通记录器 我想知道如何自动呼叫系统出口 exit(1) (或任何其他自定义回调函数)每当发生致命错误时 欢迎任何帮助 更新: 解决方案是通过重载consume()方法来解决此问题。检查普通记录器严重性级别的接收器示例: #include <boost/log/trivial.hpp> #include <boost/log/sinks/basic_sink_backend.hpp> #include <boo

我已经基于创建了一个记录器机制

我的代码基于本文所示的普通记录器

我想知道如何自动呼叫系统出口

exit(1)
(或任何其他自定义回调函数)每当发生致命错误时

欢迎任何帮助

更新:


解决方案是通过重载
consume()
方法来解决此问题。

检查普通记录器严重性级别的接收器示例:

#include <boost/log/trivial.hpp>
#include <boost/log/sinks/basic_sink_backend.hpp>
#include <boost/log/attributes/value_extraction.hpp>
#include <boost/log/sinks/async_frontend.hpp>
namespace sinks = boost::log::sinks;

void initBoostLog() {
  struct Sink: public sinks::basic_formatted_sink_backend<char, sinks::concurrent_feeding> {
    void consume (const boost::log::record_view& rec, const string& str) {
      using boost::log::trivial::severity_level;
      auto severity = rec.attribute_values()[boost::log::aux::default_attribute_names::severity()].extract<severity_level>();
      if (!severity || severity.get() <= severity_level::info) {
        std::cout << str << std::endl;
      } else {
        std::cerr << str << std::endl;
      }
    }
  };

  typedef sinks::asynchronous_sink<Sink> sink_t; boost::shared_ptr<sink_t> sink (new sink_t());
  boost::shared_ptr<boost::log::core> logc = boost::log::core::get();
  logc->add_sink (sink);
}
#包括
#包括
#包括
#包括
名称空间sinks=boost::log::sinks;
void initBoostLog(){
结构接收器:公共接收器::基本\u格式\u接收器\u后端{
无效消耗(const boost::log::record_view&rec、const string&str){
使用boost::log::triple::severity_level;
自动严重性=rec.attribute_values()[boost::log::aux::default_attribute_name::severity()]提取();

如果(!severity | | severity.get(),您可以自己编写。但是日志记录和错误处理是两个独立的问题,您可能不应该将它们混为一谈。此外,调用
exit()是一个不太优雅的终止C++程序的方法,因为RAII对象不会被释放。当你遇到致命的情况时,记录它并抛出异常有什么不对?你是对的,我有我的自定义下沉和<代码>退出(1)< /C>不优雅。它只是发生在我的脑海中/实现了一个代码>日志(致命)。
充当进程终止异常,我认为它们可以“统一”。是否自动调用了
consume()
,因为它似乎没有这样做。它编译时显示一个警告,即paren boost方法现在被隐藏。我不确定我使用同步接收器的事实是否重要。