2026-07-18 23:41:00 +04:00
|
|
|
#pragma once
|
|
|
|
|
|
2026-07-19 16:48:54 +04:00
|
|
|
#include <string_view>
|
|
|
|
|
|
2026-07-18 23:41:00 +04:00
|
|
|
namespace logger {
|
|
|
|
|
|
2026-07-19 16:48:54 +04:00
|
|
|
/**
|
|
|
|
|
* @brief Представляет уровень логирования.
|
|
|
|
|
*
|
|
|
|
|
* Экземпляры класса создаются только через статические фабричные методы.
|
|
|
|
|
*/
|
|
|
|
|
class LogLevel {
|
|
|
|
|
public:
|
|
|
|
|
/**
|
|
|
|
|
* @brief Создает уровень Debug.
|
|
|
|
|
*/
|
|
|
|
|
static LogLevel debug() { return LogLevel(Type::Debug); }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Создает уровень Info.
|
|
|
|
|
*/
|
|
|
|
|
static LogLevel info() { return LogLevel(Type::Info); }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Создает уровень Error.
|
|
|
|
|
*/
|
|
|
|
|
static LogLevel error() { return LogLevel(Type::Error); }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Возвращает строковое представление уровня.
|
|
|
|
|
*
|
|
|
|
|
* @return "DEBUG", "INFO" или "ERROR".
|
|
|
|
|
*/
|
|
|
|
|
[[nodiscard]]
|
|
|
|
|
std::string_view toString() const {
|
|
|
|
|
switch (type_) {
|
|
|
|
|
case Type::Debug:
|
|
|
|
|
return "DEBUG";
|
|
|
|
|
|
|
|
|
|
case Type::Info:
|
|
|
|
|
return "INFO";
|
|
|
|
|
|
|
|
|
|
case Type::Error:
|
|
|
|
|
return "ERROR";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return "UNKNOWN";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Сравнивает два уровня логирования.
|
|
|
|
|
*/
|
|
|
|
|
[[nodiscard]]
|
|
|
|
|
bool operator==(const LogLevel &other) const {
|
|
|
|
|
return type_ == other.type_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief Сравнивает два уровня логирования.
|
|
|
|
|
*/
|
|
|
|
|
[[nodiscard]]
|
|
|
|
|
bool operator!=(const LogLevel &other) const {
|
|
|
|
|
return !(*this == other);
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-21 13:44:54 +04:00
|
|
|
/**
|
|
|
|
|
* @brief Проверяет, является ли текущий уровень менее важным.
|
|
|
|
|
*
|
|
|
|
|
* Используется для фильтрации сообщений:
|
|
|
|
|
* сообщения с уровнем ниже заданного уровня Logger
|
|
|
|
|
* не должны записываться в журнал.
|
|
|
|
|
*/
|
|
|
|
|
[[nodiscard]]
|
|
|
|
|
bool operator<(const LogLevel &other) const {
|
|
|
|
|
return static_cast<int>(type_) < static_cast<int>(other.type_);
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-19 16:48:54 +04:00
|
|
|
private:
|
2026-07-21 13:44:54 +04:00
|
|
|
enum class Type { Debug = 0, Info = 1, Error = 2 };
|
2026-07-19 16:48:54 +04:00
|
|
|
|
|
|
|
|
explicit LogLevel(Type type) : type_(type) {}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
Type type_;
|
|
|
|
|
};
|
2026-07-18 23:41:00 +04:00
|
|
|
|
|
|
|
|
} // namespace logger
|