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> 53 explicit Sink(std::optional<PatternFormatterOptions> override_pattern_formatter_options = std::nullopt)
54 : _override_pattern_formatter_options(
std::move(override_pattern_formatter_options))
61 virtual ~
Sink() =
default;
64 Sink& operator=(
Sink const&) =
delete;
73 _log_level.store(log_level, std::memory_order_relaxed);
83 return _log_level.load(std::memory_order_relaxed);
93 if (QUILL_UNLIKELY(!filter))
95 QUILL_THROW(
QuillError{
"Filter pointer is nullptr"});
99 std::string filter_name = filter->get_filter_name();
105 auto const search_filter_it = std::find_if(_global_filters.cbegin(), _global_filters.cend(),
106 [&filter_name](RegisteredFilter
const& elem_filter)
107 {
return elem_filter.filter_name == filter_name; });
109 if (QUILL_UNLIKELY(search_filter_it != _global_filters.cend()))
111 QUILL_THROW(
QuillError{
"Filter with the same name already exists"});
114 _global_filters.emplace_back(std::move(filter_name), std::move(filter));
117 _new_filter.store(
true, std::memory_order_relaxed);
137 QUILL_ATTRIBUTE_HOT
virtual void write_log(
138 MacroMetadata const* log_metadata, uint64_t log_timestamp, std::string_view thread_id,
139 std::string_view thread_name, std::string
const& process_id, std::string_view logger_name,
140 LogLevel log_level, std::string_view log_level_description, std::string_view log_level_short_code,
141 std::vector<std::pair<std::string, std::string>>
const* named_args,
142 std::string_view log_message, std::string_view log_statement) = 0;
152 uint64_t , std::string_view ,
155 std::string_view ,
double )
162 QUILL_ATTRIBUTE_HOT
virtual void flush_sink() = 0;
186 std::string_view thread_id, std::string_view thread_name,
187 std::string_view logger_name, LogLevel log_level,
188 std::string_view log_message, std::string_view log_statement)
190 if (log_level < _log_level.load(std::memory_order_relaxed))
196 if (QUILL_UNLIKELY(_new_filter.exchange(
false, std::memory_order_relaxed)))
199 _local_filters.clear();
203 for (
auto const& filter : _global_filters)
205 _local_filters.push_back(filter.filter.get());
209 if (_local_filters.empty())
215 return std::all_of(_local_filters.begin(), _local_filters.end(),
216 [log_metadata, log_timestamp, thread_id, thread_name, logger_name,
217 log_level, log_message, log_statement](
Filter* filter_elem)
219 return filter_elem->filter(log_metadata, log_timestamp, thread_id, thread_name,
220 logger_name, log_level, log_message, log_statement);
228 struct RegisteredFilter
230 RegisteredFilter(std::string filter_name_arg, std::unique_ptr<Filter> filter_arg)
231 : filter_name(std::move(filter_name_arg)), filter(std::move(filter_arg))
235 std::string filter_name;
236 std::unique_ptr<Filter> filter;
240 std::optional<PatternFormatterOptions> _override_pattern_formatter_options;
241 std::shared_ptr<PatternFormatter> _override_pattern_formatter;
244 std::vector<Filter*> _local_filters;
247 std::vector<RegisteredFilter> _global_filters;
250 std::atomic<bool> _new_filter{
false};
252 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:185
Base class for sinks.
Definition: Sink.h:46
Definition: UserDefinedDirectFormatFuzzer.cpp:81
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:170
Base filter class.
Definition: Filter.h:28
virtual QUILL_ATTRIBUTE_HOT void write_metric(MetricMetadata const *, uint64_t, std::string_view, std::string_view, std::string const &, std::string_view, double)
Publishes a metric sample to the sink.
Definition: Sink.h:151
void add_filter(std::unique_ptr< Filter > filter)
Adds a new filter to the sink.
Definition: Sink.h:91
void set_log_level_filter(LogLevel log_level)
Sets a log level filter on the sink.
Definition: Sink.h:71
Setups a signal handler to handle fatal signals.
Definition: BackendManager.h:28
QUILL_NODISCARD LogLevel get_log_level_filter() const noexcept
Returns the current log level filter set on the sink.
Definition: Sink.h:81
Definition: Spinlock.h:18
custom exception
Definition: QuillError.h:47
Sink(std::optional< PatternFormatterOptions > override_pattern_formatter_options=std::nullopt)
Constructor Uses the default pattern formatter.
Definition: Sink.h:53
Definition: Spinlock.h:58
Definition: BackendWorker.h:80