| // 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; |
| }; |