#ifndef MATADOR_LOG_DOMAIN_HPP #define MATADOR_LOG_DOMAIN_HPP #include "matador/logger/log_level.hpp" #include "matador/logger/log_sink.hpp" #include #include #include #include namespace matador::logger { /** * @brief Connection to a set of log sinks * * A log domain is the connection point between * a set of log sinks and the logger objects * in the user code. * * A domain consists of a unique name and a * list of sinks */ class log_domain final { public: /** * The time format for each log line */ static constexpr auto TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S.%f"; /** * Creates a log_domain with the given name * and the given log range * * @param name The name of the log domain * @param log_range The log range of this domain */ log_domain(std::string name, log_level_range log_range); /** * Returns the name of the domain * * @return The name of the domain */ [[nodiscard]] std::string name() const; /** * Sets the max log level. The default * max level is LVL_FATAL * * @param max_level max log level */ void max_log_level(log_level max_level); /** * Returns the max log level * * @return The max log level */ [[nodiscard]] log_level max_log_level() const; /** * Sets the min log level. Default * min leven is LVL_INFO * * @param min_level min log level */ void min_log_level(log_level min_level); /** * Returns the min log level * * @return The min log level */ [[nodiscard]] log_level min_log_level() const; /** * Add a sink to the domain. * * The sink must be packed into a std::shared_ptr * because it can be shared among other domains * * @param sink The sink to add */ void add_sink(sink_ptr sink); /** * Logs the given message for the given source and log level * to this log domain. * * @param lvl Log level * @param source Source of the log message * @param message Message to log */ void log(log_level lvl, const std::string &source, const char *message) const; /** * Clears the list of log sinks */ void clear(); private: void get_time_stamp(char* timestamp_buffer) const; private: static std::map level_strings; std::string name_; std::list sinks{}; log_level_range log_level_range_; mutable std::mutex mutex_; }; } #endif //MATADOR_LOG_DOMAIN_HPP