9 #include "quill/core/Attributes.h" 10 #include "quill/core/LogLevel.h" 11 #include "quill/core/PatternFormatterOptions.h" 12 #include "quill/core/QuillError.h" 13 #include "quill/core/Spinlock.h" 14 #include "quill/filters/Filter.h" 22 #include <string_view> 47 explicit Sink(std::optional<PatternFormatterOptions> override_pattern_formatter_options = std::nullopt)
48 : _override_pattern_formatter_options(
std::move(override_pattern_formatter_options))
55 virtual ~
Sink() =
default;
58 Sink& operator=(
Sink const&) =
delete;
67 _log_level.store(log_level, std::memory_order_relaxed);
77 return _log_level.load(std::memory_order_relaxed);
91 auto const search_filter_it = std::find_if(
92 _global_filters.cbegin(), _global_filters.cend(), [&filter](std::unique_ptr<Filter>
const& elem_filter)
93 {
return elem_filter->get_filter_name() == filter->get_filter_name(); });
95 if (QUILL_UNLIKELY(search_filter_it != _global_filters.cend()))
97 QUILL_THROW(
QuillError{
"Filter with the same name already exists"});
100 _global_filters.push_back(std::move(filter));
103 _new_filter.store(
true, std::memory_order_relaxed);
123 QUILL_ATTRIBUTE_HOT
virtual void write_log(
124 MacroMetadata const* log_metadata, uint64_t log_timestamp, std::string_view thread_id,
125 std::string_view thread_name, std::string
const& process_id, std::string_view logger_name,
126 LogLevel log_level, std::string_view log_level_description, std::string_view log_level_short_code,
127 std::vector<std::pair<std::string, std::string>>
const* named_args,
128 std::string_view log_message, std::string_view log_statement) = 0;
133 QUILL_ATTRIBUTE_HOT
virtual void flush_sink() = 0;
157 std::string_view thread_id, std::string_view thread_name,
158 std::string_view logger_name, LogLevel log_level,
159 std::string_view log_message, std::string_view log_statement)
161 if (log_level < _log_level.load(std::memory_order_relaxed))
167 if (QUILL_UNLIKELY(_new_filter.load(std::memory_order_relaxed)))
170 _local_filters.clear();
174 for (
auto const& filter : _global_filters)
176 _local_filters.push_back(filter.get());
180 _new_filter.store(
false, std::memory_order_relaxed);
183 if (_local_filters.empty())
189 return std::all_of(_local_filters.begin(), _local_filters.end(),
190 [log_metadata, log_timestamp, thread_id, thread_name, logger_name,
191 log_level, log_message, log_statement](
Filter* filter_elem)
193 return filter_elem->filter(log_metadata, log_timestamp, thread_id, thread_name,
194 logger_name, log_level, log_message, log_statement);
203 std::optional<PatternFormatterOptions> _override_pattern_formatter_options;
204 std::shared_ptr<PatternFormatter> _override_pattern_formatter;
207 std::vector<Filter*> _local_filters;
210 std::vector<std::unique_ptr<Filter>> _global_filters;
213 std::atomic<bool> _new_filter{
false};
215 std::atomic<LogLevel> _log_level{LogLevel::TraceL3};
QUILL_NODISCARD bool apply_all_filters(MacroMetadata const *log_metadata, uint64_t log_timestamp, std::string_view thread_id, std::string_view thread_name, std::string_view logger_name, LogLevel log_level, std::string_view log_message, std::string_view log_statement)
Applies all registered filters to the log record.
Definition: Sink.h:156
Base class for sinks.
Definition: Sink.h:40
virtual QUILL_ATTRIBUTE_HOT void run_periodic_tasks() noexcept
Executes periodic tasks by the backend thread, providing an opportunity for the user to perform custo...
Definition: Sink.h:141
Base filter class.
Definition: Filter.h:26
void add_filter(std::unique_ptr< Filter > filter)
Adds a new filter to the sink.
Definition: Sink.h:85
void set_log_level_filter(LogLevel log_level)
Sets a log level filter on the sink.
Definition: Sink.h:65
Setups a signal handler to handle fatal signals.
Definition: BackendManager.h:24
QUILL_NODISCARD LogLevel get_log_level_filter() const noexcept
Returns the current log level filter set on the sink.
Definition: Sink.h:75
Definition: Spinlock.h:18
custom exception
Definition: QuillError.h:45
Sink(std::optional< PatternFormatterOptions > override_pattern_formatter_options=std::nullopt)
Constructor Uses the default pattern formatter.
Definition: Sink.h:47
Definition: Spinlock.h:58
Definition: BackendWorker.h:72