Files
2026-07-21 13:45:30 +04:00

88 lines
2.1 KiB
C++

#pragma once
#include <string_view>
namespace logger {
/**
* @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);
}
/**
* @brief Проверяет, является ли текущий уровень менее важным.
*
* Используется для фильтрации сообщений:
* сообщения с уровнем ниже заданного уровня Logger
* не должны записываться в журнал.
*/
[[nodiscard]]
bool operator<(const LogLevel &other) const {
return static_cast<int>(type_) < static_cast<int>(other.type_);
}
private:
enum class Type { Debug = 0, Info = 1, Error = 2 };
explicit LogLevel(Type type) : type_(type) {}
private:
Type type_;
};
} // namespace logger