Обратный вызов журнала Boost

Вопрос:

Я создал механизм регистрации на основе Boost Log.

Мой код основан на тривиальном регистраторе, как показано в этом примере.

Мне было интересно, как автоматически вызывать системный выход

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);
}

Оцените статью
TechArks.Ru
Добавить комментарий