18#include <unordered_map>
55 bool use_stderr =
false,
56 bool auto_detect_color =
true
58 return std::make_unique<console_writer>(use_stderr, auto_detect_color);
69 const std::string& filename,
71 std::size_t buffer_size = 8192
73 return std::make_unique<file_writer>(filename, append, buffer_size);
85 const std::string& filename,
87 std::size_t max_files,
88 std::size_t check_interval = 100
90 return std::make_unique<rotating_file_writer>(
91 filename, max_size, max_files, check_interval
104 const std::string& filename,
106 std::size_t max_files,
107 std::size_t check_interval = 100
109 return std::make_unique<rotating_file_writer>(
110 filename, type, max_files, check_interval
124 const std::string& host,
127 std::size_t buffer_size = 8192,
128 std::chrono::seconds reconnect_interval = std::chrono::seconds(5)
130 return std::make_unique<network_writer>(
131 host, port, protocol, buffer_size, reconnect_interval
144 std::size_t batch_size = 100,
145 std::chrono::milliseconds flush_interval = std::chrono::milliseconds(1000)
150 return std::make_unique<batch_writer>(std::move(writer), cfg);
172 const std::string& log_directory =
"./logs",
173 const std::string& filename =
"app.log"
175 std::string full_path = log_directory +
"/" + filename;
181 return create_batch(std::move(rotating), 200, std::chrono::milliseconds(2000));
190 const std::string& filename =
"./logs/app.log"
192 auto file = std::make_unique<file_writer>(filename,
true, 65536);
193 return create_batch(std::move(file), 500, std::chrono::milliseconds(5000));
206 registry()[name] = std::move(creator);
232 static std::unordered_map<std::string, creator_fn>&
registry() {
233 static std::unordered_map<std::string, creator_fn> instance;
Abstract base class for all log output writers kcenon.
Batch writer that accumulates log entries and writes them in batches.
Factory for creating log writer instances.
static void register_type(const std::string &name, creator_fn creator)
Register a custom writer type.
static log_writer_ptr create_production(const std::string &log_directory="./logs", const std::string &filename="app.log")
Create a production preset writer.
static log_writer_ptr create_rotating_file(const std::string &filename, std::size_t max_size, std::size_t max_files, std::size_t check_interval=100)
Create a rotating file writer (size-based)
static log_writer_ptr create_console(bool use_stderr=false, bool auto_detect_color=true)
Create a console writer.
std::function< log_writer_ptr()> creator_fn
static std::unordered_map< std::string, creator_fn > & registry()
static log_writer_ptr create_high_performance(const std::string &filename="./logs/app.log")
Create a high-performance preset writer.
static log_writer_ptr create_file(const std::string &filename, bool append=true, std::size_t buffer_size=8192)
Create a file writer.
static log_writer_ptr create_development()
Create a development preset writer.
static log_writer_ptr create_rotating_file(const std::string &filename, rotation_type type, std::size_t max_files, std::size_t check_interval=100)
Create a rotating file writer (time-based)
static bool has_type(const std::string &name)
Check if a writer type is registered.
static log_writer_ptr create_batch(log_writer_ptr writer, std::size_t batch_size=100, std::chrono::milliseconds flush_interval=std::chrono::milliseconds(1000))
Wrap a writer with batch processing.
static log_writer_ptr create(const std::string &name)
Create a writer by registered name.
static log_writer_ptr create_network(const std::string &host, uint16_t port, network_writer::protocol_type protocol=network_writer::protocol_type::tcp, std::size_t buffer_size=8192, std::chrono::seconds reconnect_interval=std::chrono::seconds(5))
Create a network writer.
Console writer for logging to stdout/stderr.
File writer for logging to files with optional buffering.
rotation_type
Determines when log rotation should occur.
std::unique_ptr< log_writer_interface > log_writer_ptr
Type alias for writer unique pointer.
Network writer for sending logs over TCP/UDP.
Rotating file writer with size and time-based rotation.
Configuration for batch writer.
std::chrono::milliseconds flush_interval