9 #include "quill/core/Attributes.h" 10 #include "quill/core/Common.h" 11 #include "quill/core/LogLevel.h" 12 #include "quill/core/MacroMetadata.h" 13 #include "quill/core/SourceLocation.h" 16 #include <type_traits> 61 explicit Tags(
char const* tag)
63 if (QUILL_UNLIKELY(!tag))
78 template <
typename... RestTags>
79 Tags(
char const* first_tag,
char const* second_tag, RestTags... rest_tags)
81 static_assert(std::conjunction_v<std::is_same<char const*, RestTags>...>,
82 "All tag parameters must be of type 'char const*'");
84 append_tag(first_tag);
85 append_tag(second_tag);
86 (append_tag(rest_tags), ...);
91 QUILL_NODISCARD
char const* value()
const noexcept {
return _value.c_str(); }
94 std::string _value{
'#'};
96 void append_tag(
char const* tag)
98 if (QUILL_UNLIKELY(!tag))
103 if (_value.size() > 1)
113 template <
typename TLogger,
typename... Args>
116 tracel3(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
118 log(logger,
"", LogLevel::TraceL3, fmt, location, std::forward<Args>(args)...);
121 tracel3(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
124 log(logger, tags.value(), LogLevel::TraceL3, fmt, location, std::forward<Args>(args)...);
128 template <
typename TLogger,
typename... Args>
129 tracel3(TLogger*,
char const*, Args&&...) ->
tracel3<TLogger, Args...>;
131 template <
typename TLogger,
typename... Args>
132 tracel3(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel3<TLogger, Args...>;
134 template <
typename TLogger,
typename... Args>
137 tracel2(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
139 log(logger,
"", LogLevel::TraceL2, fmt, location, std::forward<Args>(args)...);
142 tracel2(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
145 log(logger, tags.value(), LogLevel::TraceL2, fmt, location, std::forward<Args>(args)...);
149 template <
typename TLogger,
typename... Args>
150 tracel2(TLogger*,
char const*, Args&&...) ->
tracel2<TLogger, Args...>;
152 template <
typename TLogger,
typename... Args>
153 tracel2(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel2<TLogger, Args...>;
155 template <
typename TLogger,
typename... Args>
158 tracel1(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
160 log(logger,
"", LogLevel::TraceL1, fmt, location, std::forward<Args>(args)...);
163 tracel1(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
166 log(logger, tags.value(), LogLevel::TraceL1, fmt, location, std::forward<Args>(args)...);
170 template <
typename TLogger,
typename... Args>
171 tracel1(TLogger*,
char const*, Args&&...) ->
tracel1<TLogger, Args...>;
173 template <
typename TLogger,
typename... Args>
174 tracel1(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel1<TLogger, Args...>;
176 template <
typename TLogger,
typename... Args>
179 debug(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
181 log(logger,
"", LogLevel::Debug, fmt, location, std::forward<Args>(args)...);
184 debug(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
187 log(logger, tags.value(), LogLevel::Debug, fmt, location, std::forward<Args>(args)...);
191 template <
typename TLogger,
typename... Args>
192 debug(TLogger*,
char const*, Args&&...) ->
debug<TLogger, Args...>;
194 template <
typename TLogger,
typename... Args>
195 debug(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
debug<TLogger, Args...>;
197 template <
typename TLogger,
typename... Args>
200 info(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
202 log(logger,
"", LogLevel::Info, fmt, location, std::forward<Args>(args)...);
205 info(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
208 log(logger, tags.value(), LogLevel::Info, fmt, location, std::forward<Args>(args)...);
212 template <
typename TLogger,
typename... Args>
213 info(TLogger*,
char const*, Args&&...) ->
info<TLogger, Args...>;
215 template <
typename TLogger,
typename... Args>
216 info(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
info<TLogger, Args...>;
218 template <
typename TLogger,
typename... Args>
221 notice(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
223 log(logger,
"", LogLevel::Notice, fmt, location, std::forward<Args>(args)...);
226 notice(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
229 log(logger, tags.value(), LogLevel::Notice, fmt, location, std::forward<Args>(args)...);
233 template <
typename TLogger,
typename... Args>
234 notice(TLogger*,
char const*, Args&&...) ->
notice<TLogger, Args...>;
236 template <
typename TLogger,
typename... Args>
237 notice(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
notice<TLogger, Args...>;
239 template <
typename TLogger,
typename... Args>
242 warning(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
244 log(logger,
"", LogLevel::Warning, fmt, location, std::forward<Args>(args)...);
247 warning(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
250 log(logger, tags.value(), LogLevel::Warning, fmt, location, std::forward<Args>(args)...);
254 template <
typename TLogger,
typename... Args>
255 warning(TLogger*,
char const*, Args&&...) ->
warning<TLogger, Args...>;
257 template <
typename TLogger,
typename... Args>
258 warning(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
warning<TLogger, Args...>;
260 template <
typename TLogger,
typename... Args>
263 error(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
265 log(logger,
"", LogLevel::Error, fmt, location, std::forward<Args>(args)...);
268 error(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
271 log(logger, tags.value(), LogLevel::Error, fmt, location, std::forward<Args>(args)...);
275 template <
typename TLogger,
typename... Args>
276 error(TLogger*,
char const*, Args&&...) ->
error<TLogger, Args...>;
278 template <
typename TLogger,
typename... Args>
279 error(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
error<TLogger, Args...>;
281 template <
typename TLogger,
typename... Args>
284 critical(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
286 log(logger,
"", LogLevel::Critical, fmt, location, std::forward<Args>(args)...);
289 critical(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
292 log(logger, tags.value(), LogLevel::Critical, fmt, location, std::forward<Args>(args)...);
296 template <
typename TLogger,
typename... Args>
299 template <
typename TLogger,
typename... Args>
302 template <
typename TLogger,
typename... Args>
305 backtrace(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
307 log(logger,
"", LogLevel::Backtrace, fmt, location, std::forward<Args>(args)...);
310 backtrace(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
313 log(logger, tags.value(), LogLevel::Backtrace, fmt, location, std::forward<Args>(args)...);
317 template <
typename TLogger,
typename... Args>
320 template <
typename TLogger,
typename... Args>
324 template <
typename TLogger,
typename... Args>
325 QUILL_ATTRIBUTE_HOT
void log(TLogger* logger,
char const* tags, LogLevel log_level,
char const* fmt,
329 "[placeholder]",
"[placeholder]",
"[placeholder]",
330 nullptr, LogLevel::None, MacroMetadata::Event::LogWithRuntimeMetadataHybridCopy};
332 if (logger->should_log_statement(log_level))
334 logger->template log_statement_runtime_metadata<true>(
335 ¯o_metadata, fmt, location.file_name(), location.function_name(), tags, location.line(),
336 log_level, std::forward<Args>(args)...);
Definition: LogFunctions.h:135
Definition: LogFunctions.h:219
Definition: LogFunctions.h:198
Definition: LogFunctions.h:177
Definition: LogFunctions.h:261
Definition: LogFunctions.h:114
Definition: LogFunctions.h:240
Definition: SourceLocation.h:40
Definition: LogFunctions.h:282
Definition: LogFunctions.h:156
Definition: LogFunctions.h:303