Skip to content

Commit 4412157

Browse files
committed
async_file: Use the configuration class to replace the construction parameters of AsyncRotatingFile
1 parent d3fff7c commit 4412157

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

Diff for: include/ulog/file/async_rotating_file.h

+14-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ namespace ulog::file {
1919
template <typename Queue>
2020
class AsyncRotatingFile {
2121
public:
22+
struct Config {
23+
size_t fifo_size{};
24+
std::string filename;
25+
std::size_t max_files{};
26+
bool rotate_on_open{};
27+
std::chrono::milliseconds max_flush_period{};
28+
RotationStrategy rotation_strategy{};
29+
};
30+
2231
/**
2332
* Build a logger that asynchronously outputs data to a file
2433
* @param writer File writing instance, which may be compressed writing or direct writing
@@ -73,10 +82,14 @@ class AsyncRotatingFile {
7382
async_thread_ = std::make_unique<std::thread>(async_thread_function);
7483
}
7584

85+
explicit AsyncRotatingFile(std::unique_ptr<WriterInterface> &&writer, const Config &c)
86+
: AsyncRotatingFile(std::move(writer), c.fifo_size, c.filename, c.max_files, c.rotate_on_open, c.max_flush_period,
87+
c.rotation_strategy) {}
88+
7689
AsyncRotatingFile(const AsyncRotatingFile &) = delete;
7790
AsyncRotatingFile &operator=(const AsyncRotatingFile &) = delete;
7891

79-
Status Flush() const {
92+
[[nodiscard]] Status Flush() const {
8093
umq_->Flush();
8194
return rotating_file_.Flush();
8295
}

Diff for: tools/logrotate/logrotate.cc

+13-7
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
#include <algorithm>
66
#include <cstdlib>
77
#include <map>
8+
#include <sstream>
89

910
#include "cmdline.h"
1011
#include "ulog/file/async_rotating_file.h"
1112
#include "ulog/file/zstd_file_writer.h"
12-
#include "ulog/queue/mpsc_ring.h"
1313
#include "ulog/queue/spsc_ring.h"
1414

1515
#define ZSTD_DEFAULT_LEVEL 3
@@ -68,15 +68,15 @@ int main(const int argc, char *argv[]) {
6868
const auto fifo_size = std::max(to_bytes(args_info.fifo_size_arg), 16ULL * 1024);
6969
const auto file_size = to_bytes(args_info.file_size_arg);
7070
const auto flush_interval = to_chrono_time(args_info.flush_interval_arg);
71-
std::string filepath = args_info.file_path_arg;
71+
std::string filename = args_info.file_path_arg;
7272

7373
std::unique_ptr<ulog::file::WriterInterface> file_writer;
7474
// Zstd compression
7575
if (args_info.zstd_compress_flag) {
7676
// Append .zst extension if not present
7777
std::string basename, ext;
78-
std::tie(basename, ext) = ulog::file::SplitByExtension(filepath);
79-
if (ext.find(".zst") == std::string::npos) filepath += ".zst";
78+
std::tie(basename, ext) = ulog::file::SplitByExtension(filename);
79+
if (ext.find(".zst") == std::string::npos) filename += ".zst";
8080

8181
// Parse zstd parameters
8282
if (args_info.zstd_params_given) {
@@ -105,9 +105,15 @@ int main(const int argc, char *argv[]) {
105105
? ulog::file::RotationStrategy::kIncrement
106106
: ulog::file::RotationStrategy::kRename;
107107

108-
const ulog::file::AsyncRotatingFile<ulog::spsc::Mq<uint8_t>> async_rotate(
109-
std::move(file_writer), fifo_size, filepath, args_info.max_files_arg, args_info.rotate_first_flag, flush_interval,
110-
rotation_strategy);
108+
ulog::file::AsyncRotatingFile<ulog::spsc::Mq<>>::Config config;
109+
config.fifo_size = fifo_size;
110+
config.filename = filename;
111+
config.max_files = args_info.max_files_arg;
112+
config.rotate_on_open = args_info.rotate_first_flag;
113+
config.max_flush_period = flush_interval;
114+
config.rotation_strategy = rotation_strategy;
115+
116+
const ulog::file::AsyncRotatingFile<ulog::spsc::Mq<>> async_rotate(std::move(file_writer), config);
111117

112118
cmdline_parser_free(&args_info);
113119

0 commit comments

Comments
 (0)