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> 63 explicit Tags(
char const* tag)
66 _append_trailing_space_if_needed();
75 template <
typename... RestTags>
76 Tags(
char const* first_tag,
char const* second_tag, RestTags... rest_tags)
78 static_assert(std::conjunction_v<std::is_same<char const*, RestTags>...>,
79 "All tag parameters must be of type 'char const*'");
81 append_tag(first_tag);
82 append_tag(second_tag);
83 (append_tag(rest_tags), ...);
84 _append_trailing_space_if_needed();
88 QUILL_NODISCARD
char const* value()
const noexcept {
return _value.c_str(); }
93 void append_tag(
char const* tag)
95 if (QUILL_UNLIKELY(!tag))
112 void _append_trailing_space_if_needed()
121 template <
typename TLogger,
typename... Args>
124 tracel3(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
126 log(logger,
"", LogLevel::TraceL3, fmt, location, std::forward<Args>(args)...);
129 tracel3(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
132 log(logger, tags.value(), LogLevel::TraceL3, fmt, location, std::forward<Args>(args)...);
136 template <
typename TLogger,
typename... Args>
137 tracel3(TLogger*,
char const*, Args&&...) ->
tracel3<TLogger, Args...>;
139 template <
typename TLogger,
typename... Args>
140 tracel3(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel3<TLogger, Args...>;
142 template <
typename TLogger,
typename... Args>
145 tracel2(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
147 log(logger,
"", LogLevel::TraceL2, fmt, location, std::forward<Args>(args)...);
150 tracel2(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
153 log(logger, tags.value(), LogLevel::TraceL2, fmt, location, std::forward<Args>(args)...);
157 template <
typename TLogger,
typename... Args>
158 tracel2(TLogger*,
char const*, Args&&...) ->
tracel2<TLogger, Args...>;
160 template <
typename TLogger,
typename... Args>
161 tracel2(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel2<TLogger, Args...>;
163 template <
typename TLogger,
typename... Args>
166 tracel1(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
168 log(logger,
"", LogLevel::TraceL1, fmt, location, std::forward<Args>(args)...);
171 tracel1(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
174 log(logger, tags.value(), LogLevel::TraceL1, fmt, location, std::forward<Args>(args)...);
178 template <
typename TLogger,
typename... Args>
179 tracel1(TLogger*,
char const*, Args&&...) ->
tracel1<TLogger, Args...>;
181 template <
typename TLogger,
typename... Args>
182 tracel1(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
tracel1<TLogger, Args...>;
184 template <
typename TLogger,
typename... Args>
187 debug(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
189 log(logger,
"", LogLevel::Debug, fmt, location, std::forward<Args>(args)...);
192 debug(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
195 log(logger, tags.value(), LogLevel::Debug, fmt, location, std::forward<Args>(args)...);
199 template <
typename TLogger,
typename... Args>
200 debug(TLogger*,
char const*, Args&&...) ->
debug<TLogger, Args...>;
202 template <
typename TLogger,
typename... Args>
203 debug(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
debug<TLogger, Args...>;
205 template <
typename TLogger,
typename... Args>
208 info(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
210 log(logger,
"", LogLevel::Info, fmt, location, std::forward<Args>(args)...);
213 info(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
216 log(logger, tags.value(), LogLevel::Info, fmt, location, std::forward<Args>(args)...);
220 template <
typename TLogger,
typename... Args>
221 info(TLogger*,
char const*, Args&&...) ->
info<TLogger, Args...>;
223 template <
typename TLogger,
typename... Args>
224 info(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
info<TLogger, Args...>;
226 template <
typename TLogger,
typename... Args>
229 notice(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
231 log(logger,
"", LogLevel::Notice, fmt, location, std::forward<Args>(args)...);
234 notice(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
237 log(logger, tags.value(), LogLevel::Notice, fmt, location, std::forward<Args>(args)...);
241 template <
typename TLogger,
typename... Args>
242 notice(TLogger*,
char const*, Args&&...) ->
notice<TLogger, Args...>;
244 template <
typename TLogger,
typename... Args>
245 notice(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
notice<TLogger, Args...>;
247 template <
typename TLogger,
typename... Args>
250 warning(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
252 log(logger,
"", LogLevel::Warning, fmt, location, std::forward<Args>(args)...);
255 warning(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
258 log(logger, tags.value(), LogLevel::Warning, fmt, location, std::forward<Args>(args)...);
262 template <
typename TLogger,
typename... Args>
263 warning(TLogger*,
char const*, Args&&...) ->
warning<TLogger, Args...>;
265 template <
typename TLogger,
typename... Args>
266 warning(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
warning<TLogger, Args...>;
268 template <
typename TLogger,
typename... Args>
271 error(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
273 log(logger,
"", LogLevel::Error, fmt, location, std::forward<Args>(args)...);
276 error(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
279 log(logger, tags.value(), LogLevel::Error, fmt, location, std::forward<Args>(args)...);
283 template <
typename TLogger,
typename... Args>
284 error(TLogger*,
char const*, Args&&...) ->
error<TLogger, Args...>;
286 template <
typename TLogger,
typename... Args>
287 error(TLogger*,
Tags const& tags,
char const*, Args&&...) ->
error<TLogger, Args...>;
289 template <
typename TLogger,
typename... Args>
292 critical(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
294 log(logger,
"", LogLevel::Critical, fmt, location, std::forward<Args>(args)...);
297 critical(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
300 log(logger, tags.value(), LogLevel::Critical, fmt, location, std::forward<Args>(args)...);
304 template <
typename TLogger,
typename... Args>
307 template <
typename TLogger,
typename... Args>
310 template <
typename TLogger,
typename... Args>
313 backtrace(TLogger* logger,
char const* fmt, Args&&... args,
SourceLocation location = SourceLocation::current())
315 log(logger,
"", LogLevel::Backtrace, fmt, location, std::forward<Args>(args)...);
318 backtrace(TLogger* logger,
Tags const& tags,
char const* fmt, Args&&... args,
321 log(logger, tags.value(), LogLevel::Backtrace, fmt, location, std::forward<Args>(args)...);
325 template <
typename TLogger,
typename... Args>
328 template <
typename TLogger,
typename... Args>
332 template <
typename TLogger,
typename... Args>
333 QUILL_ATTRIBUTE_HOT
void log(TLogger* logger,
char const* tags, LogLevel log_level,
char const* fmt,
336 if (QUILL_UNLIKELY(!logger))
342 "[placeholder]",
"[placeholder]",
"[placeholder]",
343 nullptr, LogLevel::None, MacroMetadata::Event::LogWithRuntimeMetadataHybridCopy};
345 if (logger->should_log_statement(log_level))
347 logger->template log_statement_runtime_metadata<true>(
348 ¯o_metadata, fmt, location.file_name(), location.function_name(), tags, location.line(),
349 log_level, std::forward<Args>(args)...);
Definition: LogFunctions.h:143
Definition: LogFunctions.h:227
Definition: LogFunctions.h:206
Definition: LogFunctions.h:185
Definition: LogFunctions.h:269
Definition: LogFunctions.h:122
Definition: LogFunctions.h:248
Definition: SourceLocation.h:40
Definition: LogFunctions.h:290
Definition: LogFunctions.h:164
Definition: LogFunctions.h:311