Ctrl K
ComunidadGuías…

server/src/session_history_storage_diagnostics.h

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
/**
 * @file src/session_history_storage_diagnostics.h
 * @brief Runtime-configurable diagnostics boundary for session history storage.
 */
#pragma once

// standard includes
#include <sstream>
#include <string>

namespace session_history::storage::diagnostics {

  enum class level_e {
    debug,
    info,
    warning,
    error,
  };

  using sink_t = void (*)(level_e level, const std::string &message);

  // The session-history runtime installs its Boost.Log adapter before storage
  // opens the database. Component tests deliberately leave this unset.
  void set_sink(sink_t sink);
  void log(level_e level, const std::string &message);

  class message_t {
  public:
    explicit message_t(level_e level):
        level_ {level} {
    }

    message_t(const message_t &) = delete;
    message_t &operator=(const message_t &) = delete;
    message_t(message_t &&) = delete;
    message_t &operator=(message_t &&) = delete;

    ~message_t() {
      log(level_, stream_.str());
    }

    template<typename T>
    message_t &operator<<(const T &value) {
      stream_ << value;
      return *this;
    }

  private:
    level_e level_;
    std::ostringstream stream_;
  };

  inline message_t debug() {
    return message_t {level_e::debug};
  }

  inline message_t info() {
    return message_t {level_e::info};
  }

  inline message_t warning() {
    return message_t {level_e::warning};
  }

  inline message_t error() {
    return message_t {level_e::error};
  }

}  // namespace session_history::storage::diagnostics