test: add Logger implementation and test coverage
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "log_level.hpp"
|
||||
#include "result.hpp"
|
||||
|
||||
namespace logger {
|
||||
|
||||
/**
|
||||
* @brief Класс для ведения журналов (логирования) в файл.
|
||||
*
|
||||
* Logger предоставляет интерфейс для записи сообщений с различными
|
||||
* уровнями важности.
|
||||
*
|
||||
* Объект Logger владеет своим ресурсом и не может быть скопирован или
|
||||
* перемещён, чтобы исключить неоднозначность владения журналом.
|
||||
*
|
||||
* Методы with* используют неизменяемый подход:
|
||||
* они создают новый экземпляр Logger с изменённой конфигурацией.
|
||||
*/
|
||||
class Logger {
|
||||
public:
|
||||
/**
|
||||
* @brief Создаёт объект логгера.
|
||||
*
|
||||
* @param fileName Имя файла, в который будут записываться сообщения.
|
||||
* @param defaultLevel Уровень логирования по умолчанию.
|
||||
*/
|
||||
Logger(const std::string &fileName, LogLevel defaultLevel);
|
||||
|
||||
/**
|
||||
* @brief Освобождает ресурсы, используемые логгером.
|
||||
*/
|
||||
~Logger();
|
||||
|
||||
/**
|
||||
* @brief Запрещает создание копии Logger.
|
||||
*
|
||||
* Logger управляет уникальным ресурсом и не может иметь
|
||||
* несколько владельцев.
|
||||
*/
|
||||
Logger(const Logger &) = delete;
|
||||
|
||||
/**
|
||||
* @brief Запрещает копирующее присваивание.
|
||||
*/
|
||||
Logger &operator=(const Logger &) = delete;
|
||||
|
||||
/**
|
||||
* @brief Запрещает перемещение Logger.
|
||||
*/
|
||||
Logger(Logger &&) = delete;
|
||||
|
||||
/**
|
||||
* @brief Запрещает перемещающее присваивание.
|
||||
*/
|
||||
Logger &operator=(Logger &&) = delete;
|
||||
|
||||
/**
|
||||
* @brief Записывает сообщение в журнал.
|
||||
*
|
||||
* В случае успешной записи возвращается успешный Status.
|
||||
* При ошибке открытия файла или записи возвращается Status
|
||||
* с описанием ошибки.
|
||||
*
|
||||
* @param level Уровень важности сообщения.
|
||||
* @param message Текст сообщения.
|
||||
*
|
||||
* @return Статус выполнения операции.
|
||||
*/
|
||||
core::Status writeLog(LogLevel level, const std::string &message);
|
||||
|
||||
/**
|
||||
* @brief Создаёт новый Logger с изменённым уровнем логирования.
|
||||
*
|
||||
* Текущий объект не изменяется.
|
||||
*
|
||||
* @param level Новый уровень логирования.
|
||||
*
|
||||
* @return Новый объект Logger.
|
||||
*/
|
||||
Logger withLogLevel(LogLevel level) const;
|
||||
|
||||
/**
|
||||
* @brief Создаёт новый Logger с изменённым именем файла.
|
||||
*
|
||||
* Текущий объект не изменяется.
|
||||
*
|
||||
* @param fileName Новое имя файла журнала.
|
||||
*
|
||||
* @return Новый объект Logger.
|
||||
*/
|
||||
Logger withFileName(const std::string &fileName) const;
|
||||
|
||||
/**
|
||||
* @brief Возвращает текущий уровень логирования.
|
||||
*
|
||||
* @return Уровень логирования.
|
||||
*/
|
||||
LogLevel getLogLevel() const;
|
||||
|
||||
/**
|
||||
* @brief Возвращает имя файла журнала.
|
||||
*
|
||||
* @return Имя файла.
|
||||
*/
|
||||
const std::string &getFileName() const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief Имя файла журнала.
|
||||
*/
|
||||
std::string fileName_;
|
||||
|
||||
/**
|
||||
* @brief Уровень логирования по умолчанию.
|
||||
*/
|
||||
LogLevel defaultLevel_;
|
||||
};
|
||||
|
||||
} // namespace logger
|
||||
Reference in New Issue
Block a user