#ifndef LOGGER_HH #define LOGGER_HH #include #include #include namespace logger { class Logger { public: virtual ~Logger() = default; virtual void err(std::string_view message) = 0; virtual void warn(std::string_view message) = 0; virtual void info(std::string_view message) = 0; #if defined(NDEBUG) void dbg(std::string_view) {} #else virtual void dbg(std::string_view message) = 0; #endif protected: Logger() = default; Logger(Logger const&) = delete; Logger& operator=(Logger const&) = delete; }; [[nodiscard]] std::unique_ptr noop(); [[nodiscard]] std::unique_ptr syslog(std::string ident, bool verbose = false); [[nodiscard]] std::unique_ptr stderr(bool verbose = false); } // namespace logger #endif // LOGGER_HH