blob: cf5aef48accbb2a329d4e38996e9e39de4dbf55b [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2020 YADRO
#pragma once
#include "log_buffer.hpp"
#include <filesystem>
/**
* @class FileStorage
* @brief Persistent file storage with automatic log file rotation.
*/
class FileStorage
{
public:
/**
* @brief Constructor.
*
* @param[in] path absolute path to the output directory
* @param[in] prefix prefix used for log file names
* @param[in] maxFiles max number of log files that can be stored
*
* @throw std::exception in case of errors
*/
FileStorage(const std::string& path, const std::string& prefix,
size_t maxFiles);
virtual ~FileStorage() = default;
/**
* @brief Save log buffer to a file.
*
* @param[in] buf buffer with log message to save
*
* @throw std::exception in case of errors
*
* @return path to saved file
*/
virtual std::string save(const LogBuffer& buf) const;
private:
/**
* @brief Prepare output directory for a new log file and construct path.
*
* @throw std::exception in case of errors
*
* @return full path to the new file
*/
std::string newFile() const;
/**
* @brief Rotate log files in the output directory by removing the oldest
* logs.
*
* @throw std::exception in case of errors
*/
void rotate() const;
private:
/** @brief Output directory. */
std::filesystem::path outDir;
/** @brief Prefix used for log file names. */
std::string filePrefix;
/** @brief Max number of log files that can be stored. */
size_t filesLimit;
};