Logger System 0.1.3
High-performance C++20 thread-safe logging system with asynchronous capabilities
Loading...
Searching...
No Matches
filtered_writer.cpp
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
6
8
9#include <stdexcept>
10
11namespace kcenon::logger {
12
13filtered_writer::filtered_writer(std::unique_ptr<log_writer_interface> wrapped,
14 std::unique_ptr<log_filter_interface> filter)
15 : decorator_writer_base(std::move(wrapped), "filtered"), filter_(std::move(filter)) {
16 // Base class constructor handles nullptr check for wrapped writer
17}
18
20 // If no filter, pass through all entries
21 if (!filter_) {
22 return wrapped().write(entry);
23 }
24
25 // Check if entry passes the filter
26 if (filter_->should_log(entry)) {
27 return wrapped().write(entry);
28 }
29
30 // Entry filtered out - return success (not an error)
31 return common::ok();
32}
33
34std::string filtered_writer::get_name() const {
35 if (filter_) {
36 return "filtered(" + filter_->get_name() + ")_" + wrapped().get_name();
37 }
38 // Use base class default format when no filter
40}
41
43 return filter_.get();
44}
45
46// Factory function
47std::unique_ptr<filtered_writer> make_filtered_writer(
48 std::unique_ptr<log_writer_interface> writer,
49 std::unique_ptr<log_filter_interface> filter) {
50 return std::make_unique<filtered_writer>(std::move(writer), std::move(filter));
51}
52
53} // namespace kcenon::logger
Abstract base class for decorator pattern log writers.
std::string get_name() const override
Get the name of this writer.
log_writer_interface & wrapped() noexcept
Access the wrapped writer (non-const)
const log_filter_interface * get_filter() const
Get the current filter.
filtered_writer(std::unique_ptr< log_writer_interface > wrapped, std::unique_ptr< log_filter_interface > filter)
Construct a filtered writer.
std::unique_ptr< log_filter_interface > filter_
common::VoidResult write(const log_entry &entry) override
Write a log entry if it passes the filter.
std::string get_name() const override
Get the name of this writer.
virtual std::string get_name() const =0
virtual common::VoidResult write(const log_entry &entry)=0
Write a log entry.
Decorator that applies filtering to wrapped log writers.
Data structures for representing log entries and source locations kcenon.
VoidResult ok()
std::unique_ptr< filtered_writer > make_filtered_writer(std::unique_ptr< log_writer_interface > writer, std::unique_ptr< log_filter_interface > filter)
Factory function to create a filtered writer.
Represents a single log entry with all associated metadata.
Definition log_entry.h:155