9 #include "quill/core/Attributes.h" 10 #include "quill/core/Common.h" 11 #include "quill/core/LogLevel.h" 12 #include "quill/core/PatternFormatterOptions.h" 13 #include "quill/core/QuillError.h" 14 #include "quill/core/ThreadContextManager.h" 35 class BacktraceStorage;
43 LoggerBase(std::string logger_name, std::vector<std::shared_ptr<Sink>> sinks,
46 : _logger_name(static_cast<std::string&&>(logger_name)),
47 _user_clock(user_clock),
48 _clock_source(clock_source),
49 _pattern_formatter_options(static_cast<PatternFormatterOptions&&>(pattern_formatter_options))
51 for (
auto const& sink : sinks)
53 if (QUILL_UNLIKELY(!sink))
55 QUILL_THROW(
QuillError{
"sink pointer is nullptr in LoggerBase constructor"});
59 this->_sinks =
static_cast<std::vector<std::shared_ptr<Sink>
>&&>(sinks);
73 QUILL_NODISCARD std::string
const&
get_logger_name() const noexcept {
return _logger_name; }
93 return _pattern_formatter_options;
101 QUILL_NODISCARD std::vector<std::shared_ptr<Sink>>
const&
get_sinks() const noexcept
117 return _valid.load(std::memory_order_acquire);
125 auto const*
self =
this;
127 #if defined(__GNUC__) && !defined(__clang__) 130 asm volatile(
"" :
"+r"(
self) : :
"memory");
133 return self->_log_level.load(std::memory_order_relaxed);
142 if (QUILL_UNLIKELY(new_log_level == LogLevel::Backtrace))
144 QUILL_THROW(
QuillError{
"LogLevel::Backtrace is only used internally. Please don't use it."});
147 _log_level.store(new_log_level, std::memory_order_relaxed);
168 _message_flush_threshold.store(flush_every_n_messages, std::memory_order_relaxed);
175 template <LogLevel log_statement_level>
192 QUILL_NODISCARD
static bool is_current_thread_backend_thread() noexcept
194 return _is_backend_thread;
202 static void set_current_thread_is_backend_thread(
bool value) noexcept
204 _is_backend_thread = value;
207 static inline QUILL_THREAD_LOCAL
ThreadContext* _thread_context =
nullptr;
208 static inline QUILL_THREAD_LOCAL
bool _is_backend_thread{
false};
211 std::string _logger_name;
213 std::atomic<uint32_t> _message_flush_threshold{0};
214 std::atomic<uint32_t> _messages_since_last_flush{0};
215 ClockSourceType
const _clock_source;
216 std::atomic<LogLevel> _log_level{LogLevel::Info};
217 std::atomic<LogLevel> _backtrace_flush_level{LogLevel::None};
223 std::vector<std::shared_ptr<Sink>> _sinks;
224 std::shared_ptr<PatternFormatter> _pattern_formatter;
225 std::shared_ptr<BacktraceStorage> _backtrace_storage;
QUILL_NODISCARD QUILL_ATTRIBUTE_HOT bool should_log_statement() const noexcept
Checks if the given log_statement_level can be logged by this logger.
Definition: LoggerBase.h:176
QUILL_NODISCARD QUILL_ATTRIBUTE_HOT bool should_log_statement(LogLevel log_statement_level) const noexcept
Checks if the given log_statement_level can be logged by this logger.
Definition: LoggerBase.h:186
QUILL_NODISCARD std::string const & get_logger_name() const noexcept
Returns the name of the logger.
Definition: LoggerBase.h:73
std::atomic< bool > _valid
Updated by the frontend at any time, accessed by the backend.
Definition: LoggerBase.h:218
Base class for sinks.
Definition: Sink.h:46
QUILL_NODISCARD ClockSourceType get_clock_source_type() const noexcept
Returns the type of clock source being used.
Definition: LoggerBase.h:85
QUILL_NODISCARD PatternFormatterOptions const & get_pattern_formatter_options() const noexcept
Returns the pattern formatter options.
Definition: LoggerBase.h:91
QUILL_NODISCARD bool is_valid_logger() const noexcept
Checks if the logger is valid.
Definition: LoggerBase.h:115
Setups a signal handler to handle fatal signals.
Definition: BackendManager.h:28
void set_immediate_flush(uint32_t flush_every_n_messages=1)
Sets the flush interval for logging based on message count.
Definition: LoggerBase.h:166
QUILL_NODISCARD std::vector< std::shared_ptr< Sink > > const & get_sinks() const noexcept
Returns a const reference to the sinks vector.
Definition: LoggerBase.h:101
Definition: LoggerBase.h:39
QUILL_NODISCARD LogLevel get_log_level() const noexcept
Definition: LoggerBase.h:123
custom exception
Definition: QuillError.h:47
void set_log_level(LogLevel new_log_level)
Set the log level of the logger.
Definition: LoggerBase.h:140
Base class that provides a timestamp for log statements based on a user-provided clock source...
Definition: UserClockSource.h:27
QUILL_NODISCARD UserClockSource * get_user_clock_source() const noexcept
Returns the user-defined clock source.
Definition: LoggerBase.h:79
Definition: BackendWorker.h:80
Definition: LoggerManager.h:39
void mark_invalid()
This function sets the logger's validity flag to false, indicating that the logger is no longer valid...
Definition: LoggerBase.h:109
Definition: ThreadContextManager.h:54