8#include <userver/compiler/select.hpp>
9#include <userver/logging/fwd.hpp>
10#include <userver/logging/level.hpp>
11#include <userver/logging/log_filepath.hpp>
12#include <userver/logging/log_helper.hpp>
14USERVER_NAMESPACE_BEGIN
20void SetDefaultLoggerRef(LoggerRef new_logger)
noexcept;
22extern bool has_background_threads_which_can_log;
38class DefaultLoggerGuard
final {
47 DefaultLoggerGuard(DefaultLoggerGuard&&) =
delete;
48 DefaultLoggerGuard& operator=(DefaultLoggerGuard&&) =
delete;
50 ~DefaultLoggerGuard();
53 LoggerRef logger_prev_;
54 const Level level_prev_;
55 LoggerPtr logger_new_;
38class DefaultLoggerGuard
final {
…};
65class DefaultLoggerLevelScope
final {
69 DefaultLoggerLevelScope(DefaultLoggerLevelScope&&) =
delete;
70 DefaultLoggerLevelScope& operator=(DefaultLoggerLevelScope&&) =
delete;
72 ~DefaultLoggerLevelScope();
75 impl::LoggerBase& logger_;
76 const Level level_initial_;
65class DefaultLoggerLevelScope
final {
…};
93bool LoggerShouldLog(LoggerRef logger,
Level level)
noexcept;
95bool LoggerShouldLog(
const LoggerPtr& logger,
Level level)
noexcept;
97Level GetLoggerLevel(LoggerRef logger)
noexcept;
110 uint64_t count_since_reset = 0;
111 uint64_t dropped_count = 0;
112 std::chrono::steady_clock::time_point last_reset_time{};
118 RateLimiter(RateLimitData& data,
Level level)
noexcept;
119 bool ShouldLog()
const {
return should_log_; }
120 void SetShouldNotLog() { should_log_ =
false; }
121 Level GetLevel()
const {
return level_; }
122 friend LogHelper& operator<<(LogHelper& lh,
const RateLimiter& rl)
noexcept;
126 bool should_log_{
true};
127 uint64_t dropped_count_{0};
131class StaticLogEntry
final {
133 StaticLogEntry(
const char* path,
int line)
noexcept;
135 StaticLogEntry(StaticLogEntry&&) =
delete;
136 StaticLogEntry& operator=(StaticLogEntry&&) =
delete;
138 bool ShouldNotLog(LoggerRef logger,
Level level)
const noexcept;
139 bool ShouldNotLog(
const LoggerPtr& logger,
Level level)
const noexcept;
142 static constexpr std::size_t kContentSize =
compiler::SelectSize().For64Bit(40).For32Bit(24);
144 alignas(
void*) std::byte content_[kContentSize];
147template <
class NameHolder,
int Line>
148struct EntryStorage
final {
149 static inline StaticLogEntry entry{NameHolder::Get(), Line};
158#ifdef USERVER_FEATURE_ERASE_LOG_WITH_LEVEL
165#define USERVER_IMPL_ERASE_LOG
166 true ? logging::impl::Noop{}
167 : USERVER_NAMESPACE::logging::LogHelper(
168 USERVER_NAMESPACE::logging::GetDefaultLogger(),
169 USERVER_NAMESPACE::logging::Level::kTrace,
170 USERVER_NAMESPACE::utils::impl::SourceLocation::Custom(0
, {}, {})
175#define USERVER_IMPL_LOGS_TRACE_ERASER(X) USERVER_IMPL_ERASE_LOG
177#if USERVER_FEATURE_ERASE_LOG_WITH_LEVEL > 0
179#define USERVER_IMPL_LOGS_DEBUG_ERASER(X) USERVER_IMPL_ERASE_LOG
182#if USERVER_FEATURE_ERASE_LOG_WITH_LEVEL > 1
184#define USERVER_IMPL_LOGS_INFO_ERASER(X) USERVER_IMPL_ERASE_LOG
187#if USERVER_FEATURE_ERASE_LOG_WITH_LEVEL > 2
189#define USERVER_IMPL_LOGS_WARNING_ERASER(X) USERVER_IMPL_ERASE_LOG
192#if USERVER_FEATURE_ERASE_LOG_WITH_LEVEL > 3
194#define USERVER_IMPL_LOGS_ERROR_ERASER(X) USERVER_IMPL_ERASE_LOG
199#ifndef USERVER_IMPL_LOGS_TRACE_ERASER
201#define USERVER_IMPL_LOGS_TRACE_ERASER(X) X
204#ifndef USERVER_IMPL_LOGS_DEBUG_ERASER
206#define USERVER_IMPL_LOGS_DEBUG_ERASER(X) X
209#ifndef USERVER_IMPL_LOGS_INFO_ERASER
211#define USERVER_IMPL_LOGS_INFO_ERASER(X) X
214#ifndef USERVER_IMPL_LOGS_WARNING_ERASER
216#define USERVER_IMPL_LOGS_WARNING_ERASER(X) X
219#ifndef USERVER_IMPL_LOGS_ERROR_ERASER
221#define USERVER_IMPL_LOGS_ERROR_ERASER(X) X
225#define USERVER_IMPL_LOG_TO(logger, level, ...)
226 USERVER_NAMESPACE
::logging::LogHelper(logger, level, USERVER_NAMESPACE
::logging::LogClass::kLog)
227 .AsLvalue(__VA_ARGS__)
230#define USERVER_IMPL_DYNAMIC_DEBUG_ENTRY
231 []() noexcept -> const USERVER_NAMESPACE
::logging::impl::StaticLogEntry& {
233 static constexpr const char* Get() noexcept { return USERVER_FILEPATH.data(); }
235 const auto& entry = USERVER_NAMESPACE
::logging::impl::EntryStorage<NameHolder, __LINE__>::entry;
245#define LOG_TO(logger, lvl, ...)
247 USERVER_IMPL_DYNAMIC_DEBUG_ENTRY
().ShouldNotLog((logger), (lvl)),
248 static_cast<int>(lvl) < static_cast<int>(USERVER_NAMESPACE
::logging::Level::kInfo)
250 ? USERVER_NAMESPACE
::logging::impl::Noop{}
251 : USERVER_IMPL_LOG_TO
((logger), (lvl), __VA_ARGS__)
245#define LOG_TO(logger, lvl, ...) …
257#define LOG(lvl, ...) LOG_TO(USERVER_NAMESPACE
::logging::GetDefaultLogger(), (lvl), __VA_ARGS__)
262#define LOG_TRACE(...) USERVER_IMPL_LOGS_TRACE_ERASER
(LOG(USERVER_NAMESPACE
::logging::Level::kTrace, __VA_ARGS__))
267#define LOG_DEBUG(...) USERVER_IMPL_LOGS_DEBUG_ERASER
(LOG(USERVER_NAMESPACE
::logging::Level::kDebug, __VA_ARGS__))
272#define LOG_INFO(...) USERVER_IMPL_LOGS_INFO_ERASER
(LOG(USERVER_NAMESPACE
::logging::Level::kInfo, __VA_ARGS__))
277#define LOG_WARNING(...) USERVER_IMPL_LOGS_WARNING_ERASER
(LOG(USERVER_NAMESPACE
::logging::Level::kWarning, __VA_ARGS__))
282#define LOG_ERROR(...) USERVER_IMPL_LOGS_ERROR_ERASER
(LOG(USERVER_NAMESPACE
::logging::Level::kError, __VA_ARGS__))
287#define LOG_CRITICAL(...) LOG(USERVER_NAMESPACE
::logging::Level::kCritical, __VA_ARGS__)
294#define LOG_TRACE_TO(logger, ...)
295 USERVER_IMPL_LOGS_TRACE_ERASER
(LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kTrace, __VA_ARGS__))
294#define LOG_TRACE_TO(logger, ...) …
300#define LOG_DEBUG_TO(logger, ...)
301 USERVER_IMPL_LOGS_DEBUG_ERASER
(LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kDebug, __VA_ARGS__))
300#define LOG_DEBUG_TO(logger, ...) …
306#define LOG_INFO_TO(logger, ...)
307 USERVER_IMPL_LOGS_INFO_ERASER
(LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kInfo, __VA_ARGS__))
306#define LOG_INFO_TO(logger, ...) …
312#define LOG_WARNING_TO(logger, ...)
313 USERVER_IMPL_LOGS_WARNING_ERASER
(LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kWarning, __VA_ARGS__))
312#define LOG_WARNING_TO(logger, ...) …
318#define LOG_ERROR_TO(logger, ...)
319 USERVER_IMPL_LOGS_ERROR_ERASER
(LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kError, __VA_ARGS__))
318#define LOG_ERROR_TO(logger, ...) …
324#define LOG_CRITICAL_TO(logger, ...) LOG_TO(logger, USERVER_NAMESPACE
::logging::Level::kCritical, __VA_ARGS__)
335#define LOG_LIMITED_TO(logger, lvl, ...)
336 for (USERVER_NAMESPACE
::logging::impl::RateLimiter log_limited_to_rl{
337 []() -> USERVER_NAMESPACE
::logging::impl::RateLimitData& {
338 thread_local USERVER_NAMESPACE
::logging::impl::RateLimitData rl_data;
342 log_limited_to_rl.ShouldLog();
343 log_limited_to_rl.SetShouldNotLog())
344 LOG_TO((logger), log_limited_to_rl.GetLevel(), __VA_ARGS__) << log_limited_to_rl
335#define LOG_LIMITED_TO(logger, lvl, ...) …
349#define LOG_LIMITED(lvl, ...) LOG_LIMITED_TO(USERVER_NAMESPACE
::logging::GetDefaultLogger(), (lvl), __VA_ARGS__)
355#define LOG_LIMITED_TRACE(...)
356 USERVER_IMPL_LOGS_TRACE_ERASER
(LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kTrace, __VA_ARGS__))
355#define LOG_LIMITED_TRACE(...) …
362#define LOG_LIMITED_DEBUG(...)
363 USERVER_IMPL_LOGS_DEBUG_ERASER
(LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kDebug, __VA_ARGS__))
362#define LOG_LIMITED_DEBUG(...) …
369#define LOG_LIMITED_INFO(...)
370 USERVER_IMPL_LOGS_INFO_ERASER
(LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kInfo, __VA_ARGS__))
369#define LOG_LIMITED_INFO(...) …
376#define LOG_LIMITED_WARNING(...)
377 USERVER_IMPL_LOGS_WARNING_ERASER
(LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kWarning, __VA_ARGS__))
376#define LOG_LIMITED_WARNING(...) …
383#define LOG_LIMITED_ERROR(...)
384 USERVER_IMPL_LOGS_ERROR_ERASER
(LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kError, __VA_ARGS__))
383#define LOG_LIMITED_ERROR(...) …
390#define LOG_LIMITED_CRITICAL(...) LOG_LIMITED(USERVER_NAMESPACE
::logging::Level::kCritical, __VA_ARGS__)
398#define LOG_LIMITED_TRACE_TO(logger, ...)
399 USERVER_IMPL_LOGS_TRACE_ERASER
(LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kTrace, __VA_ARGS__))
398#define LOG_LIMITED_TRACE_TO(logger, ...) …
405#define LOG_LIMITED_DEBUG_TO(logger, ...)
406 USERVER_IMPL_LOGS_DEBUG_ERASER
(LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kDebug, __VA_ARGS__))
405#define LOG_LIMITED_DEBUG_TO(logger, ...) …
412#define LOG_LIMITED_INFO_TO(logger, ...)
413 USERVER_IMPL_LOGS_INFO_ERASER
(LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kInfo, __VA_ARGS__))
412#define LOG_LIMITED_INFO_TO(logger, ...) …
419#define LOG_LIMITED_WARNING_TO(logger, ...)
420 USERVER_IMPL_LOGS_WARNING_ERASER
(LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kWarning, __VA_ARGS__))
419#define LOG_LIMITED_WARNING_TO(logger, ...) …
426#define LOG_LIMITED_ERROR_TO(logger, ...)
427 USERVER_IMPL_LOGS_ERROR_ERASER
(LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kError, __VA_ARGS__))
426#define LOG_LIMITED_ERROR_TO(logger, ...) …
433#define LOG_LIMITED_CRITICAL_TO(logger, ...)
434 LOG_LIMITED_TO(logger, USERVER_NAMESPACE
::logging::Level::kCritical, __VA_ARGS__)
433#define LOG_LIMITED_CRITICAL_TO(logger, ...) …