feat: introduce LogLevel value object and improve logger API

- Replace LogLevel enum with a dedicated class that encapsulates
  log level representation.
- Add factory methods for creating Debug, Info, and Error levels.
- Add string conversion support through LogLevel::toString().
- Add equality comparison operators for LogLevel instances.

- Rename Logger::writeLog() to writeMessage().
- Add writeMessage() overload that uses the default log level.
- Implement actual file writing with error handling using core::Status.
- Improve logger documentation to reflect the updated API.

- Update logger tests to use the new LogLevel API.
- Move logger tests into the core test directory.
- Replace enum-based log level usage with LogLevel factory methods.
- Update test cases for the renamed writeMessage() method.
This commit is contained in:
user
2026-07-19 16:48:54 +04:00
parent f610505e90
commit ac9373c2c9
5 changed files with 142 additions and 40 deletions
+69 -1
View File
@@ -1,7 +1,75 @@
#pragma once
#include <string_view>
namespace logger {
enum class LogLevel { Debug = 0, Info = 1, Error = 2 };
/**
* @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);
}
private:
enum class Type { Debug, Info, Error };
explicit LogLevel(Type type) : type_(type) {}
private:
Type type_;
};
} // namespace logger
+20 -5
View File
@@ -58,18 +58,33 @@ public:
Logger &operator=(Logger &&) = delete;
/**
* @brief Записывает сообщение в журнал.
* @brief Записывает сообщение в журнал с указанным уровнем логирования.
*
* В случае успешной записи возвращается успешный Status.
* При ошибке открытия файла или записи возвращается Status
* с описанием ошибки.
*
* @param level Уровень важности сообщения.
* @param level Уровень логирования сообщения.
* @param message Текст сообщения.
*
* @return Статус выполнения операции.
*/
core::Status writeLog(LogLevel level, const std::string &message);
core::Status writeMessage(LogLevel level, const std::string &message);
/**
* @brief Записывает сообщение в журнал с уровнем логирования по умолчанию.
*
* Метод является удобной перегрузкой и эквивалентен вызову:
*
* @code
* writeMessage(getLogLevel(), message);
* @endcode
*
* @param message Текст сообщения.
*
* @return Статус выполнения операции.
*/
core::Status writeMessage(const std::string &message);
/**
* @brief Создаёт новый Logger с изменённым уровнем логирования.
@@ -96,14 +111,14 @@ public:
/**
* @brief Возвращает текущий уровень логирования.
*
* @return Уровень логирования.
* @return Уровень логирования по умолчанию.
*/
LogLevel getLogLevel() const;
/**
* @brief Возвращает имя файла журнала.
*
* @return Имя файла.
* @return Имя файла журнала.
*/
const std::string &getFileName() const;