2#ifndef LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_LOG_MACROS_HPP_INCLUDED
3#define LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_LOG_MACROS_HPP_INCLUDED
26 #define LOGIT_FUNCTION __PRETTY_FUNCTION__
27#elif defined(_MSC_VER)
28 #define LOGIT_FUNCTION __FUNCSIG__
30 #define LOGIT_FUNCTION __func__
35#define LOGIT_ENUM_TO_STR_CASE(value) case value: return #value;
37#define LOGIT_LEVEL_TRACE 0
38#define LOGIT_LEVEL_DEBUG 1
39#define LOGIT_LEVEL_INFO 2
40#define LOGIT_LEVEL_WARN 3
41#define LOGIT_LEVEL_ERROR 4
42#define LOGIT_LEVEL_FATAL 5
46#define LOGIT_CONCAT_IMPL(x, y) x##y
51#define LOGIT_CONCAT(x, y) LOGIT_CONCAT_IMPL(x, y)
53#ifdef LOGIT_WITH_CONTEXT
54#define LOGIT_MDC_PUT(key, value) ::logit::mdc_put((key), (value))
55#define LOGIT_MDC_REMOVE(key) ::logit::mdc_remove((key))
56#define LOGIT_MDC_CLEAR() ::logit::mdc_clear()
57#define LOGIT_NDC_PUSH(value) ::logit::ndc_push((value))
58#define LOGIT_NDC_POP() ::logit::ndc_pop()
59#define LOGIT_NDC_CLEAR() ::logit::ndc_clear()
60#define LOGIT_NDC_GUARD(value) ::logit::NdcGuard LOGIT_CONCAT(_logit_ndc_guard_, __COUNTER__)((value))
62#define LOGIT_MDC_PUT(key, value) do { } while (0)
63#define LOGIT_MDC_REMOVE(key) do { } while (0)
64#define LOGIT_MDC_CLEAR() do { } while (0)
65#define LOGIT_NDC_PUSH(value) do { } while (0)
66#define LOGIT_NDC_POP() do { } while (0)
67#define LOGIT_NDC_CLEAR() do { } while (0)
68#define LOGIT_NDC_GUARD(value) do { } while (0)
71#ifdef LOGIT_CPP_HEADER_LOGIT_CPP_LOGIT_ENUMS_HPP_INCLUDED
73 "LOGIT_LEVEL_TRACE mismatch");
75 "LOGIT_LEVEL_DEBUG mismatch");
77 "LOGIT_LEVEL_INFO mismatch");
79 "LOGIT_LEVEL_WARN mismatch");
81 "LOGIT_LEVEL_ERROR mismatch");
83 "LOGIT_LEVEL_FATAL mismatch");
86#ifndef LOGIT_COMPILED_LEVEL
87# define LOGIT_COMPILED_LEVEL LOGIT_LEVEL_TRACE
90#if __cplusplus >= 201703L
91# define LOGIT_IF_COMPILED_LEVEL(level) if constexpr (LOGIT_COMPILED_LEVEL <= static_cast<int>(level))
100#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
101#define LOGIT_PERROR_TRACE(message) LOGIT_DETAIL_PERROR(TRACE, message)
103#define LOGIT_PERROR_TRACE(message) do { } while (0)
106#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
107#define LOGIT_PERROR_DEBUG(message) LOGIT_DETAIL_PERROR(DEBUG, message)
109#define LOGIT_PERROR_DEBUG(message) do { } while (0)
112#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
113#define LOGIT_PERROR_INFO(message) LOGIT_DETAIL_PERROR(INFO, message)
115#define LOGIT_PERROR_INFO(message) do { } while (0)
118#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
119#define LOGIT_PERROR_WARN(message) LOGIT_DETAIL_PERROR(WARN, message)
121#define LOGIT_PERROR_WARN(message) do { } while (0)
124#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
125#define LOGIT_PERROR_ERROR(message) LOGIT_DETAIL_PERROR(ERROR, message)
127#define LOGIT_PERROR_ERROR(message) do { } while (0)
130#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
131#define LOGIT_PERROR_FATAL(message) LOGIT_DETAIL_PERROR(FATAL, message)
133#define LOGIT_PERROR_FATAL(message) do { } while (0)
138#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
139#define LOGIT_WINERR_TRACE(message) LOGIT_DETAIL_WINERR(TRACE, message)
141#define LOGIT_WINERR_TRACE(message) do { } while (0)
144#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
145#define LOGIT_WINERR_DEBUG(message) LOGIT_DETAIL_WINERR(DEBUG, message)
147#define LOGIT_WINERR_DEBUG(message) do { } while (0)
150#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
151#define LOGIT_WINERR_INFO(message) LOGIT_DETAIL_WINERR(INFO, message)
153#define LOGIT_WINERR_INFO(message) do { } while (0)
156#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
157#define LOGIT_WINERR_WARN(message) LOGIT_DETAIL_WINERR(WARN, message)
159#define LOGIT_WINERR_WARN(message) do { } while (0)
162#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
163#define LOGIT_WINERR_ERROR(message) LOGIT_DETAIL_WINERR(ERROR, message)
165#define LOGIT_WINERR_ERROR(message) do { } while (0)
168#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
169#define LOGIT_WINERR_FATAL(message) LOGIT_DETAIL_WINERR(FATAL, message)
171#define LOGIT_WINERR_FATAL(message) do { } while (0)
176#define LOGIT_WINERR_TRACE(message) do { } while (0)
177#define LOGIT_WINERR_DEBUG(message) do { } while (0)
178#define LOGIT_WINERR_INFO(message) do { } while (0)
179#define LOGIT_WINERR_WARN(message) do { } while (0)
180#define LOGIT_WINERR_ERROR(message) do { } while (0)
181#define LOGIT_WINERR_FATAL(message) do { } while (0)
186#define LOGIT_SYSERR_TRACE(message) LOGIT_WINERR_TRACE(message)
187#define LOGIT_SYSERR_DEBUG(message) LOGIT_WINERR_DEBUG(message)
188#define LOGIT_SYSERR_INFO(message) LOGIT_WINERR_INFO(message)
189#define LOGIT_SYSERR_WARN(message) LOGIT_WINERR_WARN(message)
190#define LOGIT_SYSERR_ERROR(message) LOGIT_WINERR_ERROR(message)
191#define LOGIT_SYSERR_FATAL(message) LOGIT_WINERR_FATAL(message)
193#define LOGIT_SYSERR_TRACE(message) LOGIT_PERROR_TRACE(message)
194#define LOGIT_SYSERR_DEBUG(message) LOGIT_PERROR_DEBUG(message)
195#define LOGIT_SYSERR_INFO(message) LOGIT_PERROR_INFO(message)
196#define LOGIT_SYSERR_WARN(message) LOGIT_PERROR_WARN(message)
197#define LOGIT_SYSERR_ERROR(message) LOGIT_PERROR_ERROR(message)
198#define LOGIT_SYSERR_FATAL(message) LOGIT_PERROR_FATAL(message)
209#define LOGIT_STREAM(level) \
210 logit::LogStream(level, logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, LOGIT_FUNCTION, -1)
213#define LOGIT_STREAM_WITH_INDEX(level, index) \
214 logit::LogStream(level, logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, LOGIT_FUNCTION, index)
216#define LOGIT_STREAM_TRACE() LOGIT_STREAM(logit::LogLevel::LOG_LVL_TRACE)
217#define LOGIT_STREAM_DEBUG() LOGIT_STREAM(logit::LogLevel::LOG_LVL_DEBUG)
218#define LOGIT_STREAM_INFO() LOGIT_STREAM(logit::LogLevel::LOG_LVL_INFO)
219#define LOGIT_STREAM_WARN() LOGIT_STREAM(logit::LogLevel::LOG_LVL_WARN)
220#define LOGIT_STREAM_ERROR() LOGIT_STREAM(logit::LogLevel::LOG_LVL_ERROR)
221#define LOGIT_STREAM_FATAL() LOGIT_STREAM(logit::LogLevel::LOG_LVL_FATAL)
223#define LOGIT_STREAM_TRACE_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index)
224#define LOGIT_STREAM_DEBUG_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index)
225#define LOGIT_STREAM_INFO_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index)
226#define LOGIT_STREAM_WARN_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index)
227#define LOGIT_STREAM_ERROR_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index)
228#define LOGIT_STREAM_FATAL_TO(index) LOGIT_STREAM_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index)
230#if defined(LOGIT_SHORT_NAME)
233#define LOG_S_TRACE() LOGIT_STREAM_TRACE()
234#define LOG_S_DEBUG() LOGIT_STREAM_DEBUG()
235#define LOG_S_INFO() LOGIT_STREAM_INFO()
236#define LOG_S_WARN() LOGIT_STREAM_WARN()
237#define LOG_S_ERROR() LOGIT_STREAM_ERROR()
238#define LOG_S_FATAL() LOGIT_STREAM_FATAL()
240#define LOG_S_TRACE_TO(index) LOGIT_STREAM_TRACE_TO(index)
241#define LOG_S_DEBUG_TO(index) LOGIT_STREAM_DEBUG_TO(index)
242#define LOG_S_INFO_TO(index) LOGIT_STREAM_INFO_TO(index)
243#define LOG_S_WARN_TO(index) LOGIT_STREAM_WARN_TO(index)
244#define LOG_S_ERROR_TO(index) LOGIT_STREAM_ERROR_TO(index)
245#define LOG_S_FATAL_TO(index) LOGIT_STREAM_FATAL_TO(index)
258#define LOGIT_DETAIL_SCOPE(level, phase) \
259 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, (phase), __FILE__, __LINE__, LOGIT_FUNCTION, -1, 0)
261#define LOGIT_DETAIL_SCOPE_T(level, threshold_ms, phase) \
262 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, (phase), __FILE__, __LINE__, LOGIT_FUNCTION, -1, (threshold_ms))
264#define LOGIT_DETAIL_SCOPE_PRINTF(level, fmt_str, ...) \
265 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, logit::format(fmt_str, __VA_ARGS__), __FILE__, __LINE__, LOGIT_FUNCTION, -1, 0)
266#define LOGIT_DETAIL_SCOPE_PRINTF_T(level, threshold_ms, fmt_str, ...) \
267 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, logit::format(fmt_str, __VA_ARGS__), __FILE__, __LINE__, LOGIT_FUNCTION, -1, (threshold_ms))
270#define LOGIT_DETAIL_SCOPE_FMT(level, fmt_str, ...) \
271 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, fmt::format(fmt_str, __VA_ARGS__), __FILE__, __LINE__, LOGIT_FUNCTION, -1, 0)
272#define LOGIT_DETAIL_SCOPE_FMT_T(level, threshold_ms, fmt_str, ...) \
273 ::logit::detail::ScopeTimer LOGIT_CONCAT(_logit_scope_, __COUNTER__)(level, fmt::format(fmt_str, __VA_ARGS__), __FILE__, __LINE__, LOGIT_FUNCTION, -1, (threshold_ms))
275#define LOGIT_DETAIL_SCOPE_FMT(level, fmt_str, ...) do { } while (0)
276#define LOGIT_DETAIL_SCOPE_FMT_T(level, threshold_ms, fmt_str, ...) do { } while (0)
279#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
280#define LOGIT_SCOPE_TRACE(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_TRACE, phase)
281#define LOGIT_SCOPE_TRACE_T(threshold_ms, phase) \
282 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_TRACE, threshold_ms, phase)
284#define LOGIT_SCOPE_TRACE(phase) do { } while (0)
285#define LOGIT_SCOPE_TRACE_T(threshold_ms, phase) do { } while (0)
288#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
289#define LOGIT_SCOPE_DEBUG(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_DEBUG, phase)
290#define LOGIT_SCOPE_DEBUG_T(threshold_ms, phase) \
291 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_DEBUG, threshold_ms, phase)
293#define LOGIT_SCOPE_DEBUG(phase) do { } while (0)
294#define LOGIT_SCOPE_DEBUG_T(threshold_ms, phase) do { } while (0)
297#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
298#define LOGIT_SCOPE_INFO(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_INFO, phase)
299#define LOGIT_SCOPE_INFO_T(threshold_ms, phase) \
300 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_INFO, threshold_ms, phase)
302#define LOGIT_SCOPE_INFO(phase) do { } while (0)
303#define LOGIT_SCOPE_INFO_T(threshold_ms, phase) do { } while (0)
306#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
307#define LOGIT_SCOPE_WARN(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_WARN, phase)
308#define LOGIT_SCOPE_WARN_T(threshold_ms, phase) \
309 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_WARN, threshold_ms, phase)
311#define LOGIT_SCOPE_WARN(phase) do { } while (0)
312#define LOGIT_SCOPE_WARN_T(threshold_ms, phase) do { } while (0)
315#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
316#define LOGIT_SCOPE_ERROR(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_ERROR, phase)
317#define LOGIT_SCOPE_ERROR_T(threshold_ms, phase) \
318 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_ERROR, threshold_ms, phase)
320#define LOGIT_SCOPE_ERROR(phase) do { } while (0)
321#define LOGIT_SCOPE_ERROR_T(threshold_ms, phase) do { } while (0)
324#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
325#define LOGIT_SCOPE_FATAL(phase) LOGIT_DETAIL_SCOPE(::logit::LogLevel::LOG_LVL_FATAL, phase)
326#define LOGIT_SCOPE_FATAL_T(threshold_ms, phase) \
327 LOGIT_DETAIL_SCOPE_T(::logit::LogLevel::LOG_LVL_FATAL, threshold_ms, phase)
329#define LOGIT_SCOPE_FATAL(phase) do { } while (0)
330#define LOGIT_SCOPE_FATAL_T(threshold_ms, phase) do { } while (0)
333#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
334#define LOGIT_SCOPE_PRINTF_TRACE(fmt_str, ...) \
335 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_TRACE, fmt_str, __VA_ARGS__)
336#define LOGIT_SCOPE_PRINTF_TRACE_T(threshold_ms, fmt_str, ...) \
337 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_TRACE, threshold_ms, fmt_str, __VA_ARGS__)
339#define LOGIT_SCOPE_PRINTF_TRACE(fmt_str, ...) do { } while (0)
340#define LOGIT_SCOPE_PRINTF_TRACE_T(threshold_ms, fmt_str, ...) do { } while (0)
343#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
344#define LOGIT_SCOPE_PRINTF_DEBUG(fmt_str, ...) \
345 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_DEBUG, fmt_str, __VA_ARGS__)
346#define LOGIT_SCOPE_PRINTF_DEBUG_T(threshold_ms, fmt_str, ...) \
347 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_DEBUG, threshold_ms, fmt_str, __VA_ARGS__)
349#define LOGIT_SCOPE_PRINTF_DEBUG(fmt_str, ...) do { } while (0)
350#define LOGIT_SCOPE_PRINTF_DEBUG_T(threshold_ms, fmt_str, ...) do { } while (0)
353#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
354#define LOGIT_SCOPE_PRINTF_INFO(fmt_str, ...) \
355 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_INFO, fmt_str, __VA_ARGS__)
356#define LOGIT_SCOPE_PRINTF_INFO_T(threshold_ms, fmt_str, ...) \
357 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_INFO, threshold_ms, fmt_str, __VA_ARGS__)
359#define LOGIT_SCOPE_PRINTF_INFO(fmt_str, ...) do { } while (0)
360#define LOGIT_SCOPE_PRINTF_INFO_T(threshold_ms, fmt_str, ...) do { } while (0)
363#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
364#define LOGIT_SCOPE_PRINTF_WARN(fmt_str, ...) \
365 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_WARN, fmt_str, __VA_ARGS__)
366#define LOGIT_SCOPE_PRINTF_WARN_T(threshold_ms, fmt_str, ...) \
367 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_WARN, threshold_ms, fmt_str, __VA_ARGS__)
369#define LOGIT_SCOPE_PRINTF_WARN(fmt_str, ...) do { } while (0)
370#define LOGIT_SCOPE_PRINTF_WARN_T(threshold_ms, fmt_str, ...) do { } while (0)
373#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
374#define LOGIT_SCOPE_PRINTF_ERROR(fmt_str, ...) \
375 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_ERROR, fmt_str, __VA_ARGS__)
376#define LOGIT_SCOPE_PRINTF_ERROR_T(threshold_ms, fmt_str, ...) \
377 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_ERROR, threshold_ms, fmt_str, __VA_ARGS__)
379#define LOGIT_SCOPE_PRINTF_ERROR(fmt_str, ...) do { } while (0)
380#define LOGIT_SCOPE_PRINTF_ERROR_T(threshold_ms, fmt_str, ...) do { } while (0)
383#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
384#define LOGIT_SCOPE_PRINTF_FATAL(fmt_str, ...) \
385 LOGIT_DETAIL_SCOPE_PRINTF(::logit::LogLevel::LOG_LVL_FATAL, fmt_str, __VA_ARGS__)
386#define LOGIT_SCOPE_PRINTF_FATAL_T(threshold_ms, fmt_str, ...) \
387 LOGIT_DETAIL_SCOPE_PRINTF_T(::logit::LogLevel::LOG_LVL_FATAL, threshold_ms, fmt_str, __VA_ARGS__)
389#define LOGIT_SCOPE_PRINTF_FATAL(fmt_str, ...) do { } while (0)
390#define LOGIT_SCOPE_PRINTF_FATAL_T(threshold_ms, fmt_str, ...) do { } while (0)
393#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
394#define LOGIT_SCOPE_FMT_TRACE(fmt_str, ...) \
395 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_TRACE, fmt_str, __VA_ARGS__)
396#define LOGIT_SCOPE_FMT_TRACE_T(threshold_ms, fmt_str, ...) \
397 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_TRACE, threshold_ms, fmt_str, __VA_ARGS__)
399#define LOGIT_SCOPE_FMT_TRACE(fmt_str, ...) do { } while (0)
400#define LOGIT_SCOPE_FMT_TRACE_T(threshold_ms, fmt_str, ...) do { } while (0)
403#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
404#define LOGIT_SCOPE_FMT_DEBUG(fmt_str, ...) \
405 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_DEBUG, fmt_str, __VA_ARGS__)
406#define LOGIT_SCOPE_FMT_DEBUG_T(threshold_ms, fmt_str, ...) \
407 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_DEBUG, threshold_ms, fmt_str, __VA_ARGS__)
409#define LOGIT_SCOPE_FMT_DEBUG(fmt_str, ...) do { } while (0)
410#define LOGIT_SCOPE_FMT_DEBUG_T(threshold_ms, fmt_str, ...) do { } while (0)
413#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
414#define LOGIT_SCOPE_FMT_INFO(fmt_str, ...) \
415 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_INFO, fmt_str, __VA_ARGS__)
416#define LOGIT_SCOPE_FMT_INFO_T(threshold_ms, fmt_str, ...) \
417 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_INFO, threshold_ms, fmt_str, __VA_ARGS__)
419#define LOGIT_SCOPE_FMT_INFO(fmt_str, ...) do { } while (0)
420#define LOGIT_SCOPE_FMT_INFO_T(threshold_ms, fmt_str, ...) do { } while (0)
423#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
424#define LOGIT_SCOPE_FMT_WARN(fmt_str, ...) \
425 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_WARN, fmt_str, __VA_ARGS__)
426#define LOGIT_SCOPE_FMT_WARN_T(threshold_ms, fmt_str, ...) \
427 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_WARN, threshold_ms, fmt_str, __VA_ARGS__)
429#define LOGIT_SCOPE_FMT_WARN(fmt_str, ...) do { } while (0)
430#define LOGIT_SCOPE_FMT_WARN_T(threshold_ms, fmt_str, ...) do { } while (0)
433#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
434#define LOGIT_SCOPE_FMT_ERROR(fmt_str, ...) \
435 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_ERROR, fmt_str, __VA_ARGS__)
436#define LOGIT_SCOPE_FMT_ERROR_T(threshold_ms, fmt_str, ...) \
437 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_ERROR, threshold_ms, fmt_str, __VA_ARGS__)
439#define LOGIT_SCOPE_FMT_ERROR(fmt_str, ...) do { } while (0)
440#define LOGIT_SCOPE_FMT_ERROR_T(threshold_ms, fmt_str, ...) do { } while (0)
443#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
444#define LOGIT_SCOPE_FMT_FATAL(fmt_str, ...) \
445 LOGIT_DETAIL_SCOPE_FMT(::logit::LogLevel::LOG_LVL_FATAL, fmt_str, __VA_ARGS__)
446#define LOGIT_SCOPE_FMT_FATAL_T(threshold_ms, fmt_str, ...) \
447 LOGIT_DETAIL_SCOPE_FMT_T(::logit::LogLevel::LOG_LVL_FATAL, threshold_ms, fmt_str, __VA_ARGS__)
449#define LOGIT_SCOPE_FMT_FATAL(fmt_str, ...) do { } while (0)
450#define LOGIT_SCOPE_FMT_FATAL_T(threshold_ms, fmt_str, ...) do { } while (0)
461#if __cplusplus >= 201703L
462#define LOGIT_LOG_AND_RETURN_NOARGS(level, format) \
464 LOGIT_IF_COMPILED_LEVEL(level) \
465 logit::Logger::get_instance().log_and_return( \
466 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
467 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
468 LOGIT_FUNCTION, format, {}, -1, false}); \
471#define LOGIT_LOG_AND_RETURN_NOARGS(level, format) \
473 logit::Logger::get_instance().log_and_return( \
474 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
475 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
476 LOGIT_FUNCTION, format, {}, -1, false}); \
484#if __cplusplus >= 201703L
485#define LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(level, index, format) \
487 LOGIT_IF_COMPILED_LEVEL(level) \
488 logit::Logger::get_instance().log_and_return( \
489 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
490 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
491 LOGIT_FUNCTION, format, {}, index}); \
494#define LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(level, index, format) \
496 logit::Logger::get_instance().log_and_return( \
497 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
498 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
499 LOGIT_FUNCTION, format, {}, index}); \
511#if __cplusplus >= 201703L
512#define LOGIT_LOG_AND_RETURN(level, format, arg_names, ...) \
514 LOGIT_IF_COMPILED_LEVEL(level) \
515 logit::Logger::get_instance().log_and_return( \
516 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
517 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
518 LOGIT_FUNCTION, format, arg_names, -1, false}, __VA_ARGS__); \
521#define LOGIT_LOG_AND_RETURN(level, format, arg_names, ...) \
523 logit::Logger::get_instance().log_and_return( \
524 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
525 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
526 LOGIT_FUNCTION, format, arg_names, -1, false}, __VA_ARGS__); \
535#if __cplusplus >= 201703L
536#define LOGIT_LOG_AND_RETURN_PRINT(level, arg_names, ...) \
538 LOGIT_IF_COMPILED_LEVEL(level) \
539 logit::Logger::get_instance().log_and_return( \
540 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
541 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
542 LOGIT_FUNCTION, {}, arg_names, -1, true}, __VA_ARGS__); \
545#define LOGIT_LOG_AND_RETURN_PRINT(level, arg_names, ...) \
547 logit::Logger::get_instance().log_and_return( \
548 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
549 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
550 LOGIT_FUNCTION, {}, arg_names, -1, true}, __VA_ARGS__); \
560#if __cplusplus >= 201703L
561#define LOGIT_LOG_AND_RETURN_WITH_INDEX(level, index, format, arg_names, ...) \
563 LOGIT_IF_COMPILED_LEVEL(level) \
564 logit::Logger::get_instance().log_and_return( \
565 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
566 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
567 LOGIT_FUNCTION, format, arg_names, index, false}, __VA_ARGS__); \
570#define LOGIT_LOG_AND_RETURN_WITH_INDEX(level, index, format, arg_names, ...) \
572 logit::Logger::get_instance().log_and_return( \
573 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
574 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
575 LOGIT_FUNCTION, format, arg_names, index, false}, __VA_ARGS__); \
585#if __cplusplus >= 201703L
586#define LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(level, index, arg_names, ...) \
588 LOGIT_IF_COMPILED_LEVEL(level) \
589 logit::Logger::get_instance().log_and_return( \
590 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
591 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
592 LOGIT_FUNCTION, {}, arg_names, index, true}, __VA_ARGS__); \
595#define LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(level, index, arg_names, ...) \
597 logit::Logger::get_instance().log_and_return( \
598 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
599 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
600 LOGIT_FUNCTION, {}, arg_names, index, true}, __VA_ARGS__); \
607#if __cplusplus >= 201703L
608#define LOGIT_LOG_AND_RETURN_FMT(level, format, arg_names, ...) \
610 LOGIT_IF_COMPILED_LEVEL(level) \
611 logit::Logger::get_instance().log_and_return( \
612 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
613 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
614 LOGIT_FUNCTION, format, arg_names, -1, false, true}, __VA_ARGS__); \
617#define LOGIT_LOG_AND_RETURN_FMT(level, format, arg_names, ...) \
619 logit::Logger::get_instance().log_and_return( \
620 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
621 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
622 LOGIT_FUNCTION, format, arg_names, -1, false, true}, __VA_ARGS__); \
626#if __cplusplus >= 201703L
627#define LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(level, index, format, arg_names, ...) \
629 LOGIT_IF_COMPILED_LEVEL(level) \
630 logit::Logger::get_instance().log_and_return( \
631 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
632 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
633 LOGIT_FUNCTION, format, arg_names, index, false, true}, __VA_ARGS__); \
636#define LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(level, index, format, arg_names, ...) \
638 logit::Logger::get_instance().log_and_return( \
639 logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \
640 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
641 LOGIT_FUNCTION, format, arg_names, index, false, true}, __VA_ARGS__); \
650#define LOGIT_RAW(message) \
652 logit::Logger::get_instance().log_and_return( \
653 logit::LogRecord{logit::LogLevel::LOG_LVL_INFO, LOGIT_CURRENT_TIMESTAMP_MS(), \
654 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
655 LOGIT_FUNCTION, message, {}, -1, false, false, true}); \
661#define LOGIT_RAW_TO(index, message) \
663 logit::Logger::get_instance().log_and_return( \
664 logit::LogRecord{logit::LogLevel::LOG_LVL_INFO, LOGIT_CURRENT_TIMESTAMP_MS(), \
665 logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \
666 LOGIT_FUNCTION, message, {}, index, false, false, true}); \
672#define LOGIT_RAW_IF(condition, message) \
675 LOGIT_RAW(message); \
681#define LOGIT_SECTION(name) LOGIT_RAW(::logit::detail::make_section(name))
686#define LOGIT_SECTION_TO(index, name) LOGIT_RAW_TO(index, ::logit::detail::make_section(name))
691#define LOGIT_SECTION_IF(condition, name) \
694 LOGIT_SECTION(name); \
701#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
703#define LOGIT_TRACE(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_TRACE, {}, #__VA_ARGS__, __VA_ARGS__)
704#define LOGIT_TRACE0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {})
705#define LOGIT_0TRACE() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {})
706#define LOGIT_0_TRACE() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {})
707#define LOGIT_NOARGS_TRACE() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {})
708#define LOGIT_FORMAT_TRACE(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_TRACE, fmt, #__VA_ARGS__, __VA_ARGS__)
709#define LOGIT_PRINT_TRACE(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_TRACE, #__VA_ARGS__, __VA_ARGS__)
710#define LOGIT_PRINTF_TRACE(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, logit::format(fmt, __VA_ARGS__))
712#define LOGITF_TRACE(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, fmt::format(fmt_str, __VA_ARGS__))
713#define LOGIT_FMT_TRACE(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_TRACE, fmt_str, #__VA_ARGS__, __VA_ARGS__)
715#define LOGITF_TRACE(fmt_str, ...) do { } while (0)
716#define LOGIT_FMT_TRACE(fmt_str, ...) do { } while (0)
720#define LOGIT_TRACE_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, {}, #__VA_ARGS__, __VA_ARGS__)
721#define LOGIT_TRACE0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, {})
722#define LOGIT_0TRACE_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, {})
723#define LOGIT_0_TRACE_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, {})
724#define LOGIT_NOARGS_TRACE_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, {})
725#define LOGIT_FORMAT_TRACE_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, fmt, #__VA_ARGS__, __VA_ARGS__)
726#define LOGIT_PRINT_TRACE_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, #__VA_ARGS__, __VA_ARGS__)
727#define LOGIT_PRINTF_TRACE_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, logit::format(fmt, __VA_ARGS__))
729#define LOGITF_TRACE_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, fmt::format(fmt_str, __VA_ARGS__))
730#define LOGIT_FMT_TRACE_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
732#define LOGITF_TRACE_TO(index, fmt_str, ...) do { } while (0)
733#define LOGIT_FMT_TRACE_TO(index, fmt_str, ...) do { } while (0)
736#define LOGIT_TRACE(...) do { } while (0)
737#define LOGIT_TRACE0() do { } while (0)
738#define LOGIT_0TRACE() do { } while (0)
739#define LOGIT_0_TRACE() do { } while (0)
740#define LOGIT_NOARGS_TRACE() do { } while (0)
741#define LOGIT_FORMAT_TRACE(fmt, ...) do { } while (0)
742#define LOGIT_PRINT_TRACE(...) do { } while (0)
743#define LOGIT_PRINTF_TRACE(fmt, ...) do { } while (0)
744#define LOGIT_TRACE_TO(index, ...) do { } while (0)
745#define LOGIT_TRACE0_TO(index) do { } while (0)
746#define LOGIT_0TRACE_TO(index) do { } while (0)
747#define LOGIT_0_TRACE_TO(index) do { } while (0)
748#define LOGIT_NOARGS_TRACE_TO(index) do { } while (0)
749#define LOGIT_FORMAT_TRACE_TO(index, fmt, ...) do { } while (0)
750#define LOGIT_PRINT_TRACE_TO(index, ...) do { } while (0)
751#define LOGIT_PRINTF_TRACE_TO(index, fmt, ...) do { } while (0)
754#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
756#define LOGIT_INFO(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_INFO, {}, #__VA_ARGS__, __VA_ARGS__)
757#define LOGIT_INFO0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {})
758#define LOGIT_0INFO() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {})
759#define LOGIT_0_INFO() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {})
760#define LOGIT_NOARGS_INFO() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {})
761#define LOGIT_FORMAT_INFO(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_INFO, fmt, #__VA_ARGS__, __VA_ARGS__)
762#define LOGIT_PRINT_INFO(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_INFO, #__VA_ARGS__, __VA_ARGS__)
763#define LOGIT_PRINTF_INFO(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, logit::format(fmt, __VA_ARGS__))
765#define LOGITF_INFO(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, fmt::format(fmt_str, __VA_ARGS__))
766#define LOGIT_FMT_INFO(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_INFO, fmt_str, #__VA_ARGS__, __VA_ARGS__)
768#define LOGITF_INFO(fmt_str, ...) do { } while (0)
769#define LOGIT_FMT_INFO(fmt_str, ...) do { } while (0)
773#define LOGIT_INFO_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, {}, #__VA_ARGS__, __VA_ARGS__)
774#define LOGIT_INFO0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, {})
775#define LOGIT_0INFO_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, {})
776#define LOGIT_0_INFO_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, {})
777#define LOGIT_NOARGS_INFO_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, {})
778#define LOGIT_FORMAT_INFO_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, fmt, #__VA_ARGS__, __VA_ARGS__)
779#define LOGIT_PRINT_INFO_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, #__VA_ARGS__, __VA_ARGS__)
780#define LOGIT_PRINTF_INFO_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, logit::format(fmt, __VA_ARGS__))
782#define LOGITF_INFO_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, fmt::format(fmt_str, __VA_ARGS__))
783#define LOGIT_FMT_INFO_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
785#define LOGITF_INFO_TO(index, fmt_str, ...) do { } while (0)
786#define LOGIT_FMT_INFO_TO(index, fmt_str, ...) do { } while (0)
789#define LOGIT_INFO(...) do { } while (0)
790#define LOGIT_INFO0() do { } while (0)
791#define LOGIT_0INFO() do { } while (0)
792#define LOGIT_0_INFO() do { } while (0)
793#define LOGIT_NOARGS_INFO() do { } while (0)
794#define LOGIT_FORMAT_INFO(fmt, ...) do { } while (0)
795#define LOGIT_PRINT_INFO(...) do { } while (0)
796#define LOGIT_PRINTF_INFO(fmt, ...) do { } while (0)
797#define LOGIT_INFO_TO(index, ...) do { } while (0)
798#define LOGIT_INFO0_TO(index) do { } while (0)
799#define LOGIT_0INFO_TO(index) do { } while (0)
800#define LOGIT_0_INFO_TO(index) do { } while (0)
801#define LOGIT_NOARGS_INFO_TO(index) do { } while (0)
802#define LOGIT_FORMAT_INFO_TO(index, fmt, ...) do { } while (0)
803#define LOGIT_PRINT_INFO_TO(index, ...) do { } while (0)
804#define LOGIT_PRINTF_INFO_TO(index, fmt, ...) do { } while (0)
807#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
809#define LOGIT_DEBUG(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_DEBUG, {}, #__VA_ARGS__, __VA_ARGS__)
810#define LOGIT_DEBUG0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {})
811#define LOGIT_0DEBUG() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {})
812#define LOGIT_0_DEBUG() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {})
813#define LOGIT_NOARGS_DEBUG() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {})
814#define LOGIT_FORMAT_DEBUG(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_DEBUG, fmt, #__VA_ARGS__, __VA_ARGS__)
815#define LOGIT_PRINT_DEBUG(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_DEBUG, #__VA_ARGS__, __VA_ARGS__)
816#define LOGIT_PRINTF_DEBUG(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, logit::format(fmt, __VA_ARGS__))
818#define LOGITF_DEBUG(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, fmt::format(fmt_str, __VA_ARGS__))
819#define LOGIT_FMT_DEBUG(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_DEBUG, fmt_str, #__VA_ARGS__, __VA_ARGS__)
821#define LOGITF_DEBUG(fmt_str, ...) do { } while (0)
822#define LOGIT_FMT_DEBUG(fmt_str, ...) do { } while (0)
826#define LOGIT_DEBUG_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, {}, #__VA_ARGS__, __VA_ARGS__)
827#define LOGIT_DEBUG0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, {})
828#define LOGIT_0DEBUG_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, {})
829#define LOGIT_0_DEBUG_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, {})
830#define LOGIT_NOARGS_DEBUG_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, {})
831#define LOGIT_FORMAT_DEBUG_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, fmt, #__VA_ARGS__, __VA_ARGS__)
832#define LOGIT_PRINT_DEBUG_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, #__VA_ARGS__, __VA_ARGS__)
833#define LOGIT_PRINTF_DEBUG_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, logit::format(fmt, __VA_ARGS__))
835#define LOGITF_DEBUG_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, fmt::format(fmt_str, __VA_ARGS__))
836#define LOGIT_FMT_DEBUG_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
838#define LOGITF_DEBUG_TO(index, fmt_str, ...) do { } while (0)
839#define LOGIT_FMT_DEBUG_TO(index, fmt_str, ...) do { } while (0)
842#define LOGIT_DEBUG(...) do { } while (0)
843#define LOGIT_DEBUG0() do { } while (0)
844#define LOGIT_0DEBUG() do { } while (0)
845#define LOGIT_0_DEBUG() do { } while (0)
846#define LOGIT_NOARGS_DEBUG() do { } while (0)
847#define LOGIT_FORMAT_DEBUG(fmt, ...) do { } while (0)
848#define LOGIT_PRINT_DEBUG(...) do { } while (0)
849#define LOGIT_PRINTF_DEBUG(fmt, ...) do { } while (0)
850#define LOGIT_DEBUG_TO(index, ...) do { } while (0)
851#define LOGIT_DEBUG0_TO(index) do { } while (0)
852#define LOGIT_0DEBUG_TO(index) do { } while (0)
853#define LOGIT_0_DEBUG_TO(index) do { } while (0)
854#define LOGIT_NOARGS_DEBUG_TO(index) do { } while (0)
855#define LOGIT_FORMAT_DEBUG_TO(index, fmt, ...) do { } while (0)
856#define LOGIT_PRINT_DEBUG_TO(index, ...) do { } while (0)
857#define LOGIT_PRINTF_DEBUG_TO(index, fmt, ...) do { } while (0)
860#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
862#define LOGIT_WARN(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_WARN, {}, #__VA_ARGS__, __VA_ARGS__)
863#define LOGIT_WARN0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {})
864#define LOGIT_0WARN() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {})
865#define LOGIT_0_WARN() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {})
866#define LOGIT_NOARGS_WARN() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {})
867#define LOGIT_FORMAT_WARN(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_WARN, fmt, #__VA_ARGS__, __VA_ARGS__)
868#define LOGIT_PRINT_WARN(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_WARN, #__VA_ARGS__, __VA_ARGS__)
869#define LOGIT_PRINTF_WARN(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, logit::format(fmt, __VA_ARGS__))
871#define LOGITF_WARN(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, fmt::format(fmt_str, __VA_ARGS__))
872#define LOGIT_FMT_WARN(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_WARN, fmt_str, #__VA_ARGS__, __VA_ARGS__)
874#define LOGITF_WARN(fmt_str, ...) do { } while (0)
875#define LOGIT_FMT_WARN(fmt_str, ...) do { } while (0)
879#define LOGIT_WARN_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, {}, #__VA_ARGS__, __VA_ARGS__)
880#define LOGIT_WARN0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, {})
881#define LOGIT_0WARN_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, {})
882#define LOGIT_0_WARN_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, {})
883#define LOGIT_NOARGS_WARN_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, {})
884#define LOGIT_FORMAT_WARN_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, fmt, #__VA_ARGS__, __VA_ARGS__)
885#define LOGIT_PRINT_WARN_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, #__VA_ARGS__, __VA_ARGS__)
886#define LOGIT_PRINTF_WARN_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, logit::format(fmt, __VA_ARGS__))
888#define LOGITF_WARN_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, fmt::format(fmt_str, __VA_ARGS__))
889#define LOGIT_FMT_WARN_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
891#define LOGITF_WARN_TO(index, fmt_str, ...) do { } while (0)
892#define LOGIT_FMT_WARN_TO(index, fmt_str, ...) do { } while (0)
895#define LOGIT_WARN(...) do { } while (0)
896#define LOGIT_WARN0() do { } while (0)
897#define LOGIT_0WARN() do { } while (0)
898#define LOGIT_0_WARN() do { } while (0)
899#define LOGIT_NOARGS_WARN() do { } while (0)
900#define LOGIT_FORMAT_WARN(fmt, ...) do { } while (0)
901#define LOGIT_PRINT_WARN(...) do { } while (0)
902#define LOGIT_PRINTF_WARN(fmt, ...) do { } while (0)
903#define LOGIT_WARN_TO(index, ...) do { } while (0)
904#define LOGIT_WARN0_TO(index) do { } while (0)
905#define LOGIT_0WARN_TO(index) do { } while (0)
906#define LOGIT_0_WARN_TO(index) do { } while (0)
907#define LOGIT_NOARGS_WARN_TO(index) do { } while (0)
908#define LOGIT_FORMAT_WARN_TO(index, fmt, ...) do { } while (0)
909#define LOGIT_PRINT_WARN_TO(index, ...) do { } while (0)
910#define LOGIT_PRINTF_WARN_TO(index, fmt, ...) do { } while (0)
913#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
915#define LOGIT_ERROR(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_ERROR, {}, #__VA_ARGS__, __VA_ARGS__)
916#define LOGIT_ERROR0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {})
917#define LOGIT_0ERROR() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {})
918#define LOGIT_0_ERROR() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {})
919#define LOGIT_NOARGS_ERROR() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {})
920#define LOGIT_FORMAT_ERROR(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_ERROR, fmt, #__VA_ARGS__, __VA_ARGS__)
921#define LOGIT_PRINT_ERROR(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_ERROR, #__VA_ARGS__, __VA_ARGS__)
922#define LOGIT_PRINTF_ERROR(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, logit::format(fmt, __VA_ARGS__))
924#define LOGITF_ERROR(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, fmt::format(fmt_str, __VA_ARGS__))
925#define LOGIT_FMT_ERROR(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_ERROR, fmt_str, #__VA_ARGS__, __VA_ARGS__)
927#define LOGITF_ERROR(fmt_str, ...) do { } while (0)
928#define LOGIT_FMT_ERROR(fmt_str, ...) do { } while (0)
932#define LOGIT_ERROR_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, {}, #__VA_ARGS__, __VA_ARGS__)
933#define LOGIT_ERROR0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, {})
934#define LOGIT_0ERROR_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, {})
935#define LOGIT_0_ERROR_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, {})
936#define LOGIT_NOARGS_ERROR_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, {})
937#define LOGIT_FORMAT_ERROR_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, fmt, #__VA_ARGS__, __VA_ARGS__)
938#define LOGIT_PRINT_ERROR_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, #__VA_ARGS__, __VA_ARGS__)
939#define LOGIT_PRINTF_ERROR_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, logit::format(fmt, __VA_ARGS__))
941#define LOGITF_ERROR_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, fmt::format(fmt_str, __VA_ARGS__))
942#define LOGIT_FMT_ERROR_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
944#define LOGITF_ERROR_TO(index, fmt_str, ...) do { } while (0)
945#define LOGIT_FMT_ERROR_TO(index, fmt_str, ...) do { } while (0)
948#define LOGIT_ERROR(...) do { } while (0)
949#define LOGIT_ERROR0() do { } while (0)
950#define LOGIT_0ERROR() do { } while (0)
951#define LOGIT_0_ERROR() do { } while (0)
952#define LOGIT_NOARGS_ERROR() do { } while (0)
953#define LOGIT_FORMAT_ERROR(fmt, ...) do { } while (0)
954#define LOGIT_PRINT_ERROR(...) do { } while (0)
955#define LOGIT_PRINTF_ERROR(fmt, ...) do { } while (0)
956#define LOGIT_ERROR_TO(index, ...) do { } while (0)
957#define LOGIT_ERROR0_TO(index) do { } while (0)
958#define LOGIT_0ERROR_TO(index) do { } while (0)
959#define LOGIT_0_ERROR_TO(index) do { } while (0)
960#define LOGIT_NOARGS_ERROR_TO(index) do { } while (0)
961#define LOGIT_FORMAT_ERROR_TO(index, fmt, ...) do { } while (0)
962#define LOGIT_PRINT_ERROR_TO(index, ...) do { } while (0)
963#define LOGIT_PRINTF_ERROR_TO(index, fmt, ...) do { } while (0)
966#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
968#define LOGIT_FATAL(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_FATAL, {}, #__VA_ARGS__, __VA_ARGS__)
969#define LOGIT_FATAL0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {})
970#define LOGIT_0FATAL() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {})
971#define LOGIT_0_FATAL() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {})
972#define LOGIT_NOARGS_FATAL() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {})
973#define LOGIT_FORMAT_FATAL(fmt, ...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_FATAL, fmt, #__VA_ARGS__, __VA_ARGS__)
974#define LOGIT_PRINT_FATAL(...) LOGIT_LOG_AND_RETURN_PRINT(logit::LogLevel::LOG_LVL_FATAL, #__VA_ARGS__, __VA_ARGS__)
975#define LOGIT_PRINTF_FATAL(fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, logit::format(fmt, __VA_ARGS__))
977#define LOGITF_FATAL(fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, fmt::format(fmt_str, __VA_ARGS__))
978#define LOGIT_FMT_FATAL(fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT(logit::LogLevel::LOG_LVL_FATAL, fmt_str, #__VA_ARGS__, __VA_ARGS__)
980#define LOGITF_FATAL(fmt_str, ...) do { } while (0)
981#define LOGIT_FMT_FATAL(fmt_str, ...) do { } while (0)
985#define LOGIT_FATAL_TO(index, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, {}, #__VA_ARGS__, __VA_ARGS__)
986#define LOGIT_FATAL0_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, {})
987#define LOGIT_0FATAL_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, {})
988#define LOGIT_0_FATAL_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, {})
989#define LOGIT_NOARGS_FATAL_TO(index) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, {})
990#define LOGIT_FORMAT_FATAL_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, fmt, #__VA_ARGS__, __VA_ARGS__)
991#define LOGIT_PRINT_FATAL_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, #__VA_ARGS__, __VA_ARGS__)
992#define LOGIT_PRINTF_FATAL_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, logit::format(fmt, __VA_ARGS__))
994#define LOGITF_FATAL_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, fmt::format(fmt_str, __VA_ARGS__))
995#define LOGIT_FMT_FATAL_TO(index, fmt_str, ...) LOGIT_LOG_AND_RETURN_FMT_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, fmt_str, #__VA_ARGS__, __VA_ARGS__)
997#define LOGITF_FATAL_TO(index, fmt_str, ...) do { } while (0)
998#define LOGIT_FMT_FATAL_TO(index, fmt_str, ...) do { } while (0)
1001#define LOGIT_FATAL(...) do { } while (0)
1002#define LOGIT_FATAL0() do { } while (0)
1003#define LOGIT_0FATAL() do { } while (0)
1004#define LOGIT_0_FATAL() do { } while (0)
1005#define LOGIT_NOARGS_FATAL() do { } while (0)
1006#define LOGIT_FORMAT_FATAL(fmt, ...) do { } while (0)
1007#define LOGIT_PRINT_FATAL(...) do { } while (0)
1008#define LOGIT_PRINTF_FATAL(fmt, ...) do { } while (0)
1009#define LOGIT_FATAL_TO(index, ...) do { } while (0)
1010#define LOGIT_FATAL0_TO(index) do { } while (0)
1011#define LOGIT_0FATAL_TO(index) do { } while (0)
1012#define LOGIT_0_FATAL_TO(index) do { } while (0)
1013#define LOGIT_NOARGS_FATAL_TO(index) do { } while (0)
1014#define LOGIT_FORMAT_FATAL_TO(index, fmt, ...) do { } while (0)
1015#define LOGIT_PRINT_FATAL_TO(index, ...) do { } while (0)
1016#define LOGIT_PRINTF_FATAL_TO(index, fmt, ...) do { } while (0)
1026#define LOGIT_DETAIL_CONDITIONAL_CALL(condition, expression) \
1032#define LOGIT_DETAIL_CONDITIONAL(level, condition, ...) \
1033 LOGIT_DETAIL_CONDITIONAL_CALL( \
1035 LOGIT_LOG_AND_RETURN(level, {}, #__VA_ARGS__, __VA_ARGS__))
1037#define LOGIT_DETAIL_CONDITIONAL_NOARGS(level, condition) \
1038 LOGIT_DETAIL_CONDITIONAL_CALL(condition, LOGIT_LOG_AND_RETURN_NOARGS(level, {}))
1040#define LOGIT_DETAIL_CONDITIONAL_FORMAT(level, condition, fmt, ...) \
1041 LOGIT_DETAIL_CONDITIONAL_CALL( \
1043 LOGIT_LOG_AND_RETURN(level, fmt, #__VA_ARGS__, __VA_ARGS__))
1045#define LOGIT_DETAIL_CONDITIONAL_PRINT(level, condition, ...) \
1046 LOGIT_DETAIL_CONDITIONAL_CALL( \
1048 LOGIT_LOG_AND_RETURN_PRINT(level, #__VA_ARGS__, __VA_ARGS__))
1050#define LOGIT_DETAIL_CONDITIONAL_PRINTF(level, condition, fmt, ...) \
1051 LOGIT_DETAIL_CONDITIONAL_CALL( \
1053 LOGIT_LOG_AND_RETURN_NOARGS(level, logit::format(fmt, __VA_ARGS__)))
1055#ifdef LOGIT_WITH_FMT
1056#define LOGIT_DETAIL_CONDITIONAL_FMT_STRING(level, condition, fmt_str, ...) \
1057 LOGIT_DETAIL_CONDITIONAL_CALL( \
1059 LOGIT_LOG_AND_RETURN_NOARGS(level, fmt::format(fmt_str, __VA_ARGS__)))
1061#define LOGIT_DETAIL_CONDITIONAL_FMT(level, condition, fmt_str, ...) \
1062 LOGIT_DETAIL_CONDITIONAL_CALL( \
1064 LOGIT_LOG_AND_RETURN_FMT(level, fmt_str, #__VA_ARGS__, __VA_ARGS__))
1067#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE
1069#define LOGIT_TRACE_IF(condition, ...) \
1070 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_TRACE, condition, __VA_ARGS__)
1071#define LOGIT_TRACE0_IF(condition) \
1072 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_TRACE, condition)
1073#define LOGIT_0TRACE_IF(condition) \
1074 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_TRACE, condition)
1075#define LOGIT_0_TRACE_IF(condition) \
1076 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_TRACE, condition)
1077#define LOGIT_NOARGS_TRACE_IF(condition) \
1078 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_TRACE, condition)
1079#define LOGIT_FORMAT_TRACE_IF(condition, fmt, ...) \
1080 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1081 logit::LogLevel::LOG_LVL_TRACE, condition, fmt, __VA_ARGS__)
1082#define LOGIT_PRINT_TRACE_IF(condition, ...) \
1083 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1084 logit::LogLevel::LOG_LVL_TRACE, condition, __VA_ARGS__)
1085#define LOGIT_PRINTF_TRACE_IF(condition, fmt, ...) \
1086 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1087 logit::LogLevel::LOG_LVL_TRACE, condition, fmt, __VA_ARGS__)
1088#ifdef LOGIT_WITH_FMT
1089#define LOGITF_TRACE_IF(condition, fmt_str, ...) \
1090 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1091 logit::LogLevel::LOG_LVL_TRACE, condition, fmt_str, __VA_ARGS__)
1092#define LOGIT_FMT_TRACE_IF(condition, fmt_str, ...) \
1093 LOGIT_DETAIL_CONDITIONAL_FMT( \
1094 logit::LogLevel::LOG_LVL_TRACE, condition, fmt_str, __VA_ARGS__)
1096#define LOGITF_TRACE_IF(condition, fmt_str, ...) do { } while (0)
1097#define LOGIT_FMT_TRACE_IF(condition, fmt_str, ...) do { } while (0)
1100#define LOGIT_TRACE_IF(condition, ...) do { } while (0)
1101#define LOGIT_TRACE0_IF(condition) do { } while (0)
1102#define LOGIT_0TRACE_IF(condition) do { } while (0)
1103#define LOGIT_0_TRACE_IF(condition) do { } while (0)
1104#define LOGIT_NOARGS_TRACE_IF(condition) do { } while (0)
1105#define LOGIT_FORMAT_TRACE_IF(condition, fmt, ...) do { } while (0)
1106#define LOGIT_PRINT_TRACE_IF(condition, ...) do { } while (0)
1107#define LOGIT_PRINTF_TRACE_IF(condition, fmt, ...) do { } while (0)
1108#define LOGITF_TRACE(fmt_str, ...) do { } while (0)
1109#define LOGIT_FMT_TRACE(fmt_str, ...) do { } while (0)
1110#define LOGITF_TRACE_TO(index, fmt_str, ...) do { } while (0)
1111#define LOGIT_FMT_TRACE_TO(index, fmt_str, ...) do { } while (0)
1112#define LOGITF_TRACE_IF(condition, fmt_str, ...) do { } while (0)
1113#define LOGIT_FMT_TRACE_IF(condition, fmt_str, ...) do { } while (0)
1116#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO
1118#define LOGIT_INFO_IF(condition, ...) \
1119 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_INFO, condition, __VA_ARGS__)
1120#define LOGIT_INFO0_IF(condition) \
1121 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_INFO, condition)
1122#define LOGIT_0INFO_IF(condition) \
1123 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_INFO, condition)
1124#define LOGIT_0_INFO_IF(condition) \
1125 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_INFO, condition)
1126#define LOGIT_NOARGS_INFO_IF(condition) \
1127 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_INFO, condition)
1128#define LOGIT_FORMAT_INFO_IF(condition, fmt, ...) \
1129 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1130 logit::LogLevel::LOG_LVL_INFO, condition, fmt, __VA_ARGS__)
1131#define LOGIT_PRINT_INFO_IF(condition, ...) \
1132 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1133 logit::LogLevel::LOG_LVL_INFO, condition, __VA_ARGS__)
1134#define LOGIT_PRINTF_INFO_IF(condition, fmt, ...) \
1135 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1136 logit::LogLevel::LOG_LVL_INFO, condition, fmt, __VA_ARGS__)
1137#ifdef LOGIT_WITH_FMT
1138#define LOGITF_INFO_IF(condition, fmt_str, ...) \
1139 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1140 logit::LogLevel::LOG_LVL_INFO, condition, fmt_str, __VA_ARGS__)
1141#define LOGIT_FMT_INFO_IF(condition, fmt_str, ...) \
1142 LOGIT_DETAIL_CONDITIONAL_FMT( \
1143 logit::LogLevel::LOG_LVL_INFO, condition, fmt_str, __VA_ARGS__)
1145#define LOGITF_INFO_IF(condition, fmt_str, ...) do { } while (0)
1146#define LOGIT_FMT_INFO_IF(condition, fmt_str, ...) do { } while (0)
1149#define LOGIT_INFO_IF(condition, ...) do { } while (0)
1150#define LOGIT_INFO0_IF(condition) do { } while (0)
1151#define LOGIT_0INFO_IF(condition) do { } while (0)
1152#define LOGIT_0_INFO_IF(condition) do { } while (0)
1153#define LOGIT_NOARGS_INFO_IF(condition) do { } while (0)
1154#define LOGIT_FORMAT_INFO_IF(condition, fmt, ...) do { } while (0)
1155#define LOGIT_PRINT_INFO_IF(condition, ...) do { } while (0)
1156#define LOGIT_PRINTF_INFO_IF(condition, fmt, ...) do { } while (0)
1157#define LOGITF_INFO(fmt_str, ...) do { } while (0)
1158#define LOGIT_FMT_INFO(fmt_str, ...) do { } while (0)
1159#define LOGITF_INFO_TO(index, fmt_str, ...) do { } while (0)
1160#define LOGIT_FMT_INFO_TO(index, fmt_str, ...) do { } while (0)
1161#define LOGITF_INFO_IF(condition, fmt_str, ...) do { } while (0)
1162#define LOGIT_FMT_INFO_IF(condition, fmt_str, ...) do { } while (0)
1165#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG
1167#define LOGIT_DEBUG_IF(condition, ...) \
1168 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_DEBUG, condition, __VA_ARGS__)
1169#define LOGIT_DEBUG0_IF(condition) \
1170 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, condition)
1171#define LOGIT_0DEBUG_IF(condition) \
1172 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, condition)
1173#define LOGIT_0_DEBUG_IF(condition) \
1174 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, condition)
1175#define LOGIT_NOARGS_DEBUG_IF(condition) \
1176 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, condition)
1177#define LOGIT_FORMAT_DEBUG_IF(condition, fmt, ...) \
1178 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1179 logit::LogLevel::LOG_LVL_DEBUG, condition, fmt, __VA_ARGS__)
1180#define LOGIT_PRINT_DEBUG_IF(condition, ...) \
1181 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1182 logit::LogLevel::LOG_LVL_DEBUG, condition, __VA_ARGS__)
1183#define LOGIT_PRINTF_DEBUG_IF(condition, fmt, ...) \
1184 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1185 logit::LogLevel::LOG_LVL_DEBUG, condition, fmt, __VA_ARGS__)
1186#ifdef LOGIT_WITH_FMT
1187#define LOGITF_DEBUG_IF(condition, fmt_str, ...) \
1188 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1189 logit::LogLevel::LOG_LVL_DEBUG, condition, fmt_str, __VA_ARGS__)
1190#define LOGIT_FMT_DEBUG_IF(condition, fmt_str, ...) \
1191 LOGIT_DETAIL_CONDITIONAL_FMT( \
1192 logit::LogLevel::LOG_LVL_DEBUG, condition, fmt_str, __VA_ARGS__)
1194#define LOGITF_DEBUG_IF(condition, fmt_str, ...) do { } while (0)
1195#define LOGIT_FMT_DEBUG_IF(condition, fmt_str, ...) do { } while (0)
1198#define LOGIT_DEBUG_IF(condition, ...) do { } while (0)
1199#define LOGIT_DEBUG0_IF(condition) do { } while (0)
1200#define LOGIT_0DEBUG_IF(condition) do { } while (0)
1201#define LOGIT_0_DEBUG_IF(condition) do { } while (0)
1202#define LOGIT_NOARGS_DEBUG_IF(condition) do { } while (0)
1203#define LOGIT_FORMAT_DEBUG_IF(condition, fmt, ...) do { } while (0)
1204#define LOGIT_PRINT_DEBUG_IF(condition, ...) do { } while (0)
1205#define LOGIT_PRINTF_DEBUG_IF(condition, fmt, ...) do { } while (0)
1206#define LOGITF_DEBUG(fmt_str, ...) do { } while (0)
1207#define LOGIT_FMT_DEBUG(fmt_str, ...) do { } while (0)
1208#define LOGITF_DEBUG_TO(index, fmt_str, ...) do { } while (0)
1209#define LOGIT_FMT_DEBUG_TO(index, fmt_str, ...) do { } while (0)
1210#define LOGITF_DEBUG_IF(condition, fmt_str, ...) do { } while (0)
1211#define LOGIT_FMT_DEBUG_IF(condition, fmt_str, ...) do { } while (0)
1214#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN
1216#define LOGIT_WARN_IF(condition, ...) \
1217 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_WARN, condition, __VA_ARGS__)
1218#define LOGIT_WARN0_IF(condition) \
1219 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_WARN, condition)
1220#define LOGIT_0WARN_IF(condition) \
1221 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_WARN, condition)
1222#define LOGIT_0_WARN_IF(condition) \
1223 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_WARN, condition)
1224#define LOGIT_NOARGS_WARN_IF(condition) \
1225 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_WARN, condition)
1226#define LOGIT_FORMAT_WARN_IF(condition, fmt, ...) \
1227 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1228 logit::LogLevel::LOG_LVL_WARN, condition, fmt, __VA_ARGS__)
1229#define LOGIT_PRINT_WARN_IF(condition, ...) \
1230 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1231 logit::LogLevel::LOG_LVL_WARN, condition, __VA_ARGS__)
1232#define LOGIT_PRINTF_WARN_IF(condition, fmt, ...) \
1233 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1234 logit::LogLevel::LOG_LVL_WARN, condition, fmt, __VA_ARGS__)
1235#ifdef LOGIT_WITH_FMT
1236#define LOGITF_WARN_IF(condition, fmt_str, ...) \
1237 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1238 logit::LogLevel::LOG_LVL_WARN, condition, fmt_str, __VA_ARGS__)
1239#define LOGIT_FMT_WARN_IF(condition, fmt_str, ...) \
1240 LOGIT_DETAIL_CONDITIONAL_FMT( \
1241 logit::LogLevel::LOG_LVL_WARN, condition, fmt_str, __VA_ARGS__)
1243#define LOGITF_WARN_IF(condition, fmt_str, ...) do { } while (0)
1244#define LOGIT_FMT_WARN_IF(condition, fmt_str, ...) do { } while (0)
1247#define LOGIT_WARN_IF(condition, ...) do { } while (0)
1248#define LOGIT_WARN0_IF(condition) do { } while (0)
1249#define LOGIT_0WARN_IF(condition) do { } while (0)
1250#define LOGIT_0_WARN_IF(condition) do { } while (0)
1251#define LOGIT_NOARGS_WARN_IF(condition) do { } while (0)
1252#define LOGIT_FORMAT_WARN_IF(condition, fmt, ...) do { } while (0)
1253#define LOGIT_PRINT_WARN_IF(condition, ...) do { } while (0)
1254#define LOGIT_PRINTF_WARN_IF(condition, fmt, ...) do { } while (0)
1255#define LOGITF_WARN(fmt_str, ...) do { } while (0)
1256#define LOGIT_FMT_WARN(fmt_str, ...) do { } while (0)
1257#define LOGITF_WARN_TO(index, fmt_str, ...) do { } while (0)
1258#define LOGIT_FMT_WARN_TO(index, fmt_str, ...) do { } while (0)
1259#define LOGITF_WARN_IF(condition, fmt_str, ...) do { } while (0)
1260#define LOGIT_FMT_WARN_IF(condition, fmt_str, ...) do { } while (0)
1263#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR
1265#define LOGIT_ERROR_IF(condition, ...) \
1266 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_ERROR, condition, __VA_ARGS__)
1267#define LOGIT_ERROR0_IF(condition) \
1268 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_ERROR, condition)
1269#define LOGIT_0ERROR_IF(condition) \
1270 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_ERROR, condition)
1271#define LOGIT_0_ERROR_IF(condition) \
1272 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_ERROR, condition)
1273#define LOGIT_NOARGS_ERROR_IF(condition) \
1274 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_ERROR, condition)
1275#define LOGIT_FORMAT_ERROR_IF(condition, fmt, ...) \
1276 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1277 logit::LogLevel::LOG_LVL_ERROR, condition, fmt, __VA_ARGS__)
1278#define LOGIT_PRINT_ERROR_IF(condition, ...) \
1279 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1280 logit::LogLevel::LOG_LVL_ERROR, condition, __VA_ARGS__)
1281#define LOGIT_PRINTF_ERROR_IF(condition, fmt, ...) \
1282 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1283 logit::LogLevel::LOG_LVL_ERROR, condition, fmt, __VA_ARGS__)
1284#ifdef LOGIT_WITH_FMT
1285#define LOGITF_ERROR_IF(condition, fmt_str, ...) \
1286 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1287 logit::LogLevel::LOG_LVL_ERROR, condition, fmt_str, __VA_ARGS__)
1288#define LOGIT_FMT_ERROR_IF(condition, fmt_str, ...) \
1289 LOGIT_DETAIL_CONDITIONAL_FMT( \
1290 logit::LogLevel::LOG_LVL_ERROR, condition, fmt_str, __VA_ARGS__)
1292#define LOGITF_ERROR_IF(condition, fmt_str, ...) do { } while (0)
1293#define LOGIT_FMT_ERROR_IF(condition, fmt_str, ...) do { } while (0)
1296#define LOGIT_ERROR_IF(condition, ...) do { } while (0)
1297#define LOGIT_ERROR0_IF(condition) do { } while (0)
1298#define LOGIT_0ERROR_IF(condition) do { } while (0)
1299#define LOGIT_0_ERROR_IF(condition) do { } while (0)
1300#define LOGIT_NOARGS_ERROR_IF(condition) do { } while (0)
1301#define LOGIT_FORMAT_ERROR_IF(condition, fmt, ...) do { } while (0)
1302#define LOGIT_PRINT_ERROR_IF(condition, ...) do { } while (0)
1303#define LOGIT_PRINTF_ERROR_IF(condition, fmt, ...) do { } while (0)
1304#define LOGITF_ERROR(fmt_str, ...) do { } while (0)
1305#define LOGIT_FMT_ERROR(fmt_str, ...) do { } while (0)
1306#define LOGITF_ERROR_TO(index, fmt_str, ...) do { } while (0)
1307#define LOGIT_FMT_ERROR_TO(index, fmt_str, ...) do { } while (0)
1308#define LOGITF_ERROR_IF(condition, fmt_str, ...) do { } while (0)
1309#define LOGIT_FMT_ERROR_IF(condition, fmt_str, ...) do { } while (0)
1312#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL
1314#define LOGIT_FATAL_IF(condition, ...) \
1315 LOGIT_DETAIL_CONDITIONAL(logit::LogLevel::LOG_LVL_FATAL, condition, __VA_ARGS__)
1316#define LOGIT_FATAL0_IF(condition) \
1317 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_FATAL, condition)
1318#define LOGIT_0FATAL_IF(condition) \
1319 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_FATAL, condition)
1320#define LOGIT_0_FATAL_IF(condition) \
1321 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_FATAL, condition)
1322#define LOGIT_NOARGS_FATAL_IF(condition) \
1323 LOGIT_DETAIL_CONDITIONAL_NOARGS(logit::LogLevel::LOG_LVL_FATAL, condition)
1324#define LOGIT_FORMAT_FATAL_IF(condition, fmt, ...) \
1325 LOGIT_DETAIL_CONDITIONAL_FORMAT( \
1326 logit::LogLevel::LOG_LVL_FATAL, condition, fmt, __VA_ARGS__)
1327#define LOGIT_PRINT_FATAL_IF(condition, ...) \
1328 LOGIT_DETAIL_CONDITIONAL_PRINT( \
1329 logit::LogLevel::LOG_LVL_FATAL, condition, __VA_ARGS__)
1330#define LOGIT_PRINTF_FATAL_IF(condition, fmt, ...) \
1331 LOGIT_DETAIL_CONDITIONAL_PRINTF( \
1332 logit::LogLevel::LOG_LVL_FATAL, condition, fmt, __VA_ARGS__)
1333#ifdef LOGIT_WITH_FMT
1334#define LOGITF_FATAL_IF(condition, fmt_str, ...) \
1335 LOGIT_DETAIL_CONDITIONAL_FMT_STRING( \
1336 logit::LogLevel::LOG_LVL_FATAL, condition, fmt_str, __VA_ARGS__)
1337#define LOGIT_FMT_FATAL_IF(condition, fmt_str, ...) \
1338 LOGIT_DETAIL_CONDITIONAL_FMT( \
1339 logit::LogLevel::LOG_LVL_FATAL, condition, fmt_str, __VA_ARGS__)
1341#define LOGITF_FATAL_IF(condition, fmt_str, ...) do { } while (0)
1342#define LOGIT_FMT_FATAL_IF(condition, fmt_str, ...) do { } while (0)
1345#define LOGIT_FATAL_IF(condition, ...) do { } while (0)
1346#define LOGIT_FATAL0_IF(condition) do { } while (0)
1347#define LOGIT_0FATAL_IF(condition) do { } while (0)
1348#define LOGIT_0_FATAL_IF(condition) do { } while (0)
1349#define LOGIT_NOARGS_FATAL_IF(condition) do { } while (0)
1350#define LOGIT_FORMAT_FATAL_IF(condition, fmt, ...) do { } while (0)
1351#define LOGIT_PRINT_FATAL_IF(condition, ...) do { } while (0)
1352#define LOGIT_PRINTF_FATAL_IF(condition, fmt, ...) do { } while (0)
1353#define LOGITF_FATAL(fmt_str, ...) do { } while (0)
1354#define LOGIT_FMT_FATAL(fmt_str, ...) do { } while (0)
1355#define LOGITF_FATAL_TO(index, fmt_str, ...) do { } while (0)
1356#define LOGIT_FMT_FATAL_TO(index, fmt_str, ...) do { } while (0)
1357#define LOGITF_FATAL_IF(condition, fmt_str, ...) do { } while (0)
1358#define LOGIT_FMT_FATAL_IF(condition, fmt_str, ...) do { } while (0)
1361#define LOGIT_ONCE(level, ...) \
1363 static bool LOGIT_CONCAT(_logit_once_, __LINE__) = false; \
1364 if (!LOGIT_CONCAT(_logit_once_, __LINE__)) { \
1365 LOGIT_CONCAT(_logit_once_, __LINE__) = true; \
1366 LOGIT_LOG_AND_RETURN(level, {}, #__VA_ARGS__, __VA_ARGS__); \
1370#define LOGIT_EVERY_N(level, n, ...) \
1372 static unsigned LOGIT_CONCAT(_logit_count_, __LINE__) = 0; \
1373 if (++LOGIT_CONCAT(_logit_count_, __LINE__) % (n) == 0) { \
1374 LOGIT_LOG_AND_RETURN(level, {}, #__VA_ARGS__, __VA_ARGS__); \
1378#define LOGIT_THROTTLE(level, period_ms, ...) \
1380 static int64_t LOGIT_CONCAT(_logit_last_, __LINE__) = 0; \
1381 int64_t _logit_now = LOGIT_MONOTONIC_MS(); \
1382 if (_logit_now - LOGIT_CONCAT(_logit_last_, __LINE__) >= (period_ms)) { \
1383 LOGIT_CONCAT(_logit_last_, __LINE__) = _logit_now; \
1384 LOGIT_LOG_AND_RETURN(level, {}, #__VA_ARGS__, __VA_ARGS__); \
1388#define LOGIT_TRACE_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_TRACE, __VA_ARGS__)
1389#define LOGIT_DEBUG_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_DEBUG, __VA_ARGS__)
1390#define LOGIT_INFO_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_INFO, __VA_ARGS__)
1391#define LOGIT_WARN_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_WARN, __VA_ARGS__)
1392#define LOGIT_ERROR_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_ERROR, __VA_ARGS__)
1393#define LOGIT_FATAL_ONCE(...) LOGIT_ONCE(logit::LogLevel::LOG_LVL_FATAL, __VA_ARGS__)
1395#define LOGIT_TRACE_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_TRACE, n, __VA_ARGS__)
1396#define LOGIT_DEBUG_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_DEBUG, n, __VA_ARGS__)
1397#define LOGIT_INFO_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_INFO, n, __VA_ARGS__)
1398#define LOGIT_WARN_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_WARN, n, __VA_ARGS__)
1399#define LOGIT_ERROR_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_ERROR, n, __VA_ARGS__)
1400#define LOGIT_FATAL_EVERY_N(n, ...) LOGIT_EVERY_N(logit::LogLevel::LOG_LVL_FATAL, n, __VA_ARGS__)
1402#define LOGIT_TRACE_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_TRACE, p, __VA_ARGS__)
1403#define LOGIT_DEBUG_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_DEBUG, p, __VA_ARGS__)
1404#define LOGIT_INFO_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_INFO, p, __VA_ARGS__)
1405#define LOGIT_WARN_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_WARN, p, __VA_ARGS__)
1406#define LOGIT_ERROR_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_ERROR, p, __VA_ARGS__)
1407#define LOGIT_FATAL_THROTTLE(p, ...) LOGIT_THROTTLE(logit::LogLevel::LOG_LVL_FATAL, p, __VA_ARGS__)
1409#define LOGIT_TAG(k, v) ::logit::detail::make_tag((k), (v))
1411#define LOGIT_TRACE_TAG(msg, ...) LOGIT_PRINT_TRACE(msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1412#define LOGIT_DEBUG_TAG(msg, ...) LOGIT_PRINT_DEBUG(msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1413#define LOGIT_INFO_TAG(msg, ...) LOGIT_PRINT_INFO (msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1414#define LOGIT_WARN_TAG(msg, ...) LOGIT_PRINT_WARN (msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1415#define LOGIT_ERROR_TAG(msg, ...) LOGIT_PRINT_ERROR(msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1416#define LOGIT_FATAL_TAG(msg, ...) LOGIT_PRINT_FATAL(msg, ::logit::detail::format_tags({ __VA_ARGS__ }))
1420#if defined(LOGIT_SHORT_NAME)
1423#define LOG_T(...) LOGIT_TRACE(__VA_ARGS__)
1424#define LOG_T0() LOGIT_TRACE0()
1425#define LOG_0T() LOGIT_TRACE0()
1426#define LOG_0_T() LOGIT_TRACE0()
1427#define LOG_T_NOARGS() LOGIT_NOARGS_TRACE()
1428#define LOG_NOARGS_T() LOGIT_NOARGS_TRACE()
1429#define LOG_TF(fmt, ...) LOGIT_FORMAT_TRACE(fmt, __VA_ARGS__)
1430#define LOG_FT(fmt, ...) LOGIT_FORMAT_TRACE(fmt, __VA_ARGS__)
1431#define LOG_T_PRINT(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1432#define LOG_PRINT_T(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1433#define LOG_T_PRINTF(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1434#define LOG_PRINTF_T(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1435#define LOG_TP(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1436#define LOG_PT(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1437#define LOG_TPF(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1438#define LOG_PFT(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1440#define LOG_TRACE(...) LOGIT_TRACE(__VA_ARGS__)
1441#define LOG_TRACE0() LOGIT_TRACE0()
1442#define LOG_0TRACE() LOGIT_TRACE0()
1443#define LOG_0_TRACE() LOGIT_TRACE0()
1444#define LOG_TRACE_NOARGS() LOGIT_NOARGS_TRACE()
1445#define LOG_NOARGS_TRACE() LOGIT_NOARGS_TRACE()
1446#define LOG_TRACEF(fmt, ...) LOGIT_FORMAT_TRACE(fmt, __VA_ARGS__)
1447#define LOG_FTRACE(fmt, ...) LOGIT_FORMAT_TRACE(fmt, __VA_ARGS__)
1448#define LOG_TRACE_PRINT(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1449#define LOG_PRINT_TRACE(...) LOGIT_PRINT_TRACE(__VA_ARGS__)
1450#define LOG_TRACE_PRINTF(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1451#define LOG_PRINTF_TRACE(fmt, ...) LOGIT_PRINTF_TRACE(fmt, __VA_ARGS__)
1454#define LOG_I(...) LOGIT_INFO(__VA_ARGS__)
1455#define LOG_I0() LOGIT_INFO0()
1456#define LOG_0I() LOGIT_INFO0()
1457#define LOG_0_I() LOGIT_INFO0()
1458#define LOG_I_NOARGS() LOGIT_NOARGS_INFO()
1459#define LOG_NOARGS_I() LOGIT_NOARGS_INFO()
1460#define LOG_IF(fmt, ...) LOGIT_FORMAT_INFO(fmt, __VA_ARGS__)
1461#define LOG_FI(fmt, ...) LOGIT_FORMAT_INFO(fmt, __VA_ARGS__)
1462#define LOG_I_PRINT(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1463#define LOG_PRINT_I(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1464#define LOG_I_PRINTF(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1465#define LOG_PRINTF_I(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1466#define LOG_IP(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1467#define LOG_PI(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1468#define LOG_IPF(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1469#define LOG_PFI(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1471#define LOG_INFO(...) LOGIT_INFO(__VA_ARGS__)
1472#define LOG_INFO0() LOGIT_INFO0()
1473#define LOG_0INFO() LOGIT_INFO0()
1474#define LOG_0_INFO() LOGIT_INFO0()
1475#define LOG_INFO_NOARGS() LOGIT_NOARGS_INFO()
1476#define LOG_NOARGS_INFO() LOGIT_NOARGS_INFO()
1477#define LOG_INFOF(fmt, ...) LOGIT_FORMAT_INFO(fmt, __VA_ARGS__)
1478#define LOG_FINFO(fmt, ...) LOGIT_FORMAT_INFO(fmt, __VA_ARGS__)
1479#define LOG_INFO_PRINT(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1480#define LOG_PRINT_INFO(...) LOGIT_PRINT_INFO(__VA_ARGS__)
1481#define LOG_INFO_PRINTF(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1482#define LOG_PRINTF_INFO(fmt, ...) LOGIT_PRINTF_INFO(fmt, __VA_ARGS__)
1485#define LOG_D(...) LOGIT_DEBUG(__VA_ARGS__)
1486#define LOG_D0() LOGIT_DEBUG0()
1487#define LOG_0D() LOGIT_DEBUG0()
1488#define LOG_0_D() LOGIT_DEBUG0()
1489#define LOG_D_NOARGS() LOGIT_NOARGS_DEBUG()
1490#define LOG_NOARGS_D() LOGIT_NOARGS_DEBUG()
1491#define LOG_DF(fmt, ...) LOGIT_FORMAT_DEBUG(fmt, __VA_ARGS__)
1492#define LOG_FD(fmt, ...) LOGIT_FORMAT_DEBUG(fmt, __VA_ARGS__)
1493#define LOG_D_PRINT(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1494#define LOG_PRINT_D(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1495#define LOG_D_PRINTF(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1496#define LOG_PRINTF_D(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1497#define LOG_DP(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1498#define LOG_PD(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1499#define LOG_DPF(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1500#define LOG_PFD(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1502#define LOG_DEBUG(...) LOGIT_DEBUG(__VA_ARGS__)
1503#define LOG_DEBUG0() LOGIT_DEBUG0()
1504#define LOG_0DEBUG() LOGIT_DEBUG0()
1505#define LOG_0_DEBUG() LOGIT_DEBUG0()
1506#define LOG_DEBUG_NOARGS() LOGIT_NOARGS_DEBUG()
1507#define LOG_NOARGS_DEBUG() LOGIT_NOARGS_DEBUG()
1508#define LOG_DEBUGF(fmt, ...) LOGIT_FORMAT_DEBUG(fmt, __VA_ARGS__)
1509#define LOG_FDEBUG(fmt, ...) LOGIT_FORMAT_DEBUG(fmt, __VA_ARGS__)
1510#define LOG_DEBUG_PRINT(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1511#define LOG_PRINT_DEBUG(...) LOGIT_PRINT_DEBUG(__VA_ARGS__)
1512#define LOG_DEBUG_PRINTF(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1513#define LOG_PRINTF_DEBUG(fmt, ...) LOGIT_PRINTF_DEBUG(fmt, __VA_ARGS__)
1516#define LOG_W(...) LOGIT_WARN(__VA_ARGS__)
1517#define LOG_W0() LOGIT_WARN0()
1518#define LOG_0W() LOGIT_WARN0()
1519#define LOG_0_W() LOGIT_WARN0()
1520#define LOG_W_NOARGS() LOGIT_NOARGS_WARN()
1521#define LOG_NOARGS_W() LOGIT_NOARGS_WARN()
1522#define LOG_WF(fmt, ...) LOGIT_FORMAT_WARN(fmt, __VA_ARGS__)
1523#define LOG_FW(fmt, ...) LOGIT_FORMAT_WARN(fmt, __VA_ARGS__)
1524#define LOG_W_PRINT(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1525#define LOG_PRINT_W(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1526#define LOG_W_PRINTF(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1527#define LOG_PRINTF_W(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1528#define LOG_WP(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1529#define LOG_PW(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1530#define LOG_WPF(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1531#define LOG_PFW(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1533#define LOG_WARN(...) LOGIT_WARN(__VA_ARGS__)
1534#define LOG_WARN0() LOGIT_WARN0()
1535#define LOG_0WARN() LOGIT_WARN0()
1536#define LOG_0_WARN() LOGIT_WARN0()
1537#define LOG_WARN_NOARGS() LOGIT_NOARGS_WARN()
1538#define LOG_NOARGS_WARN() LOGIT_NOARGS_WARN()
1539#define LOG_WARNF(fmt, ...) LOGIT_FORMAT_WARN(fmt, __VA_ARGS__)
1540#define LOG_FWARN(fmt, ...) LOGIT_FORMAT_WARN(fmt, __VA_ARGS__)
1541#define LOG_WARN_PRINT(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1542#define LOG_PRINT_WARN(...) LOGIT_PRINT_WARN(__VA_ARGS__)
1543#define LOG_WARN_PRINTF(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1544#define LOG_PRINTF_WARN(fmt, ...) LOGIT_PRINTF_WARN(fmt, __VA_ARGS__)
1547#define LOG_E(...) LOGIT_ERROR(__VA_ARGS__)
1548#define LOG_E0() LOGIT_ERROR0()
1549#define LOG_0E() LOGIT_ERROR0()
1550#define LOG_0_E() LOGIT_ERROR0()
1551#define LOG_E_NOARGS() LOGIT_NOARGS_ERROR()
1552#define LOG_NOARGS_E() LOGIT_NOARGS_ERROR()
1553#define LOG_EF(fmt, ...) LOGIT_FORMAT_ERROR(fmt, __VA_ARGS__)
1554#define LOG_FE(fmt, ...) LOGIT_FORMAT_ERROR(fmt, __VA_ARGS__)
1555#define LOG_E_PRINT(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1556#define LOG_PRINT_E(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1557#define LOG_E_PRINTF(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1558#define LOG_PRINTF_E(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1559#define LOG_EP(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1560#define LOG_PE(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1561#define LOG_EPF(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1562#define LOG_PFE(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1564#define LOG_ERROR(...) LOGIT_ERROR(__VA_ARGS__)
1565#define LOG_ERROR0() LOGIT_ERROR0()
1566#define LOG_0ERROR() LOGIT_ERROR0()
1567#define LOG_0_ERROR() LOGIT_ERROR0()
1568#define LOG_ERROR_NOARGS() LOGIT_NOARGS_ERROR()
1569#define LOG_NOARGS_ERROR() LOGIT_NOARGS_ERROR()
1570#define LOG_ERRORF(fmt, ...) LOGIT_FORMAT_ERROR(fmt, __VA_ARGS__)
1571#define LOG_FERROR(fmt, ...) LOGIT_FORMAT_ERROR(fmt, __VA_ARGS__)
1572#define LOG_ERROR_PRINT(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1573#define LOG_PRINT_ERROR(...) LOGIT_PRINT_ERROR(__VA_ARGS__)
1574#define LOG_ERROR_PRINTF(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1575#define LOG_PRINTF_ERROR(fmt, ...) LOGIT_PRINTF_ERROR(fmt, __VA_ARGS__)
1578#define LOG_F(...) LOGIT_FATAL(__VA_ARGS__)
1579#define LOG_F0() LOGIT_FATAL0()
1580#define LOG_0F() LOGIT_FATAL0()
1581#define LOG_0_F() LOGIT_FATAL0()
1582#define LOG_F_NOARGS() LOGIT_NOARGS_FATAL()
1583#define LOG_NOARGS_F() LOGIT_NOARGS_FATAL()
1584#define LOG_FF(fmt, ...) LOGIT_FORMAT_FATAL(fmt, __VA_ARGS__)
1585#define LOG_F_PRINT(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1586#define LOG_PRINT_F(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1587#define LOG_F_PRINTF(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1588#define LOG_PRINTF_F(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1589#define LOG_FP(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1590#define LOG_PF(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1591#define LOG_FPF(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1592#define LOG_PFF(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1594#define LOG_FATAL(...) LOGIT_FATAL(__VA_ARGS__)
1595#define LOG_FATAL0() LOGIT_FATAL0()
1596#define LOG_0FATAL() LOGIT_FATAL0()
1597#define LOG_0_FATAL() LOGIT_FATAL0()
1598#define LOG_FATAL_NOARGS() LOGIT_NOARGS_FATAL()
1599#define LOG_NOARGS_FATAL() LOGIT_NOARGS_FATAL()
1600#define LOG_FATALF(fmt, ...) LOGIT_FORMAT_FATAL(fmt, __VA_ARGS__)
1601#define LOG_FFATAL(fmt, ...) LOGIT_FORMAT_FATAL(fmt, __VA_ARGS__)
1602#define LOG_FATAL_PRINT(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1603#define LOG_PRINT_FATAL(...) LOGIT_PRINT_FATAL(__VA_ARGS__)
1604#define LOG_FATAL_PRINTF(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1605#define LOG_PRINTF_FATAL(fmt, ...) LOGIT_PRINTF_FATAL(fmt, __VA_ARGS__)
1615#if __cplusplus >= 201703L
1623#define LOGIT_ADD_LOGGER(logger_type, logger_args, formatter_type, formatter_args) \
1624 logit::Logger::get_instance().add_logger( \
1625 std::make_unique<logger_type> logger_args, \
1626 std::make_unique<formatter_type> formatter_args)
1635#define LOGIT_ADD_LOGGER_SINGLE_MODE(logger_type, logger_args, formatter_type, formatter_args) \
1636 logit::Logger::get_instance().add_logger( \
1637 std::make_unique<logger_type> logger_args, \
1638 std::make_unique<formatter_type> formatter_args, \
1645#define LOGIT_ADD_CONSOLE(pattern, async) \
1646 logit::Logger::get_instance().add_logger( \
1647 std::make_unique<logit::ConsoleLogger>(async), \
1648 std::make_unique<logit::SimpleLogFormatter>(pattern));
1655#define LOGIT_ADD_CONSOLE_SINGLE_MODE(pattern, async) \
1656 logit::Logger::get_instance().add_logger( \
1657 std::make_unique<logit::ConsoleLogger>(async), \
1658 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1662#define LOGIT_ADD_CONSOLE_CONFIG(config, pattern) \
1663 logit::Logger::get_instance().add_logger( \
1664 std::make_unique<logit::ConsoleLogger>(config), \
1665 std::make_unique<logit::SimpleLogFormatter>(pattern))
1668#define LOGIT_ADD_CONSOLE_CONFIG_SINGLE_MODE(config, pattern) \
1669 logit::Logger::get_instance().add_logger( \
1670 std::make_unique<logit::ConsoleLogger>(config), \
1671 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1675#define LOGIT_ADD_CONSOLE_EX(pattern, async, use_dedicated_executor, queue_capacity, queue_policy) \
1676 logit::Logger::get_instance().add_logger( \
1677 std::make_unique<logit::ConsoleLogger>( \
1678 (async), (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1679 std::make_unique<logit::SimpleLogFormatter>(pattern))
1682#define LOGIT_ADD_CONSOLE_EX_SINGLE_MODE(pattern, async, use_dedicated_executor, queue_capacity, queue_policy) \
1683 logit::Logger::get_instance().add_logger( \
1684 std::make_unique<logit::ConsoleLogger>( \
1685 (async), (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1686 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1690#define LOGIT_ADD_CONSOLE_DEDICATED(pattern, queue_capacity, queue_policy) \
1691 LOGIT_ADD_CONSOLE_EX((pattern), true, true, (queue_capacity), (queue_policy))
1694#define LOGIT_ADD_CONSOLE_DEDICATED_SINGLE_MODE(pattern, queue_capacity, queue_policy) \
1695 LOGIT_ADD_CONSOLE_EX_SINGLE_MODE((pattern), true, true, (queue_capacity), (queue_policy))
1700#define LOGIT_ADD_CONSOLE_DEFAULT() \
1701 logit::Logger::get_instance().add_logger( \
1702 std::make_unique<logit::ConsoleLogger>(true), \
1703 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN));
1708#define LOGIT_ADD_CONSOLE_DEFAULT_SINGLE_MODE() \
1709 logit::Logger::get_instance().add_logger( \
1710 std::make_unique<logit::ConsoleLogger>(true), \
1711 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), \
1720#define LOGIT_ADD_FILE_LOGGER(directory, async, auto_delete_days, pattern) \
1721 logit::Logger::get_instance().add_logger( \
1722 std::make_unique<logit::FileLogger>( \
1723 directory, async, auto_delete_days), \
1724 std::make_unique<logit::SimpleLogFormatter>(pattern));
1733#define LOGIT_ADD_FILE_LOGGER_SINGLE_MODE(directory, async, auto_delete_days, pattern) \
1734 logit::Logger::get_instance().add_logger( \
1735 std::make_unique<logit::FileLogger>( \
1736 directory, async, auto_delete_days), \
1737 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1741#define LOGIT_ADD_FILE_LOGGER_CONFIG(config, pattern) \
1742 logit::Logger::get_instance().add_logger( \
1743 std::make_unique<logit::FileLogger>(config), \
1744 std::make_unique<logit::SimpleLogFormatter>(pattern))
1747#define LOGIT_ADD_FILE_LOGGER_CONFIG_SINGLE_MODE(config, pattern) \
1748 logit::Logger::get_instance().add_logger( \
1749 std::make_unique<logit::FileLogger>(config), \
1750 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1754#define LOGIT_ADD_FILE_LOGGER_EX(directory, async, auto_delete_days, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
1755 logit::Logger::get_instance().add_logger( \
1756 std::make_unique<logit::FileLogger>( \
1757 (directory), (async), (auto_delete_days), (use_dedicated_executor), \
1758 (queue_capacity), (queue_policy)), \
1759 std::make_unique<logit::SimpleLogFormatter>(pattern))
1762#define LOGIT_ADD_FILE_LOGGER_EX_SINGLE_MODE(directory, async, auto_delete_days, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
1763 logit::Logger::get_instance().add_logger( \
1764 std::make_unique<logit::FileLogger>( \
1765 (directory), (async), (auto_delete_days), (use_dedicated_executor), \
1766 (queue_capacity), (queue_policy)), \
1767 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1771#define LOGIT_ADD_FILE_LOGGER_DEDICATED(directory, auto_delete_days, pattern, queue_capacity, queue_policy) \
1772 LOGIT_ADD_FILE_LOGGER_EX((directory), true, (auto_delete_days), (pattern), true, (queue_capacity), (queue_policy))
1775#define LOGIT_ADD_FILE_LOGGER_DEDICATED_SINGLE_MODE(directory, auto_delete_days, pattern, queue_capacity, queue_policy) \
1776 LOGIT_ADD_FILE_LOGGER_EX_SINGLE_MODE((directory), true, (auto_delete_days), (pattern), true, (queue_capacity), (queue_policy))
1781#define LOGIT_ADD_FILE_LOGGER_DEFAULT() \
1782 logit::Logger::get_instance().add_logger( \
1783 std::make_unique<logit::FileLogger>( \
1784 LOGIT_FILE_LOGGER_PATH, true, \
1785 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS), \
1786 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN));
1791#define LOGIT_ADD_FILE_LOGGER_DEFAULT_SINGLE_MODE() \
1792 logit::Logger::get_instance().add_logger( \
1793 std::make_unique<logit::FileLogger>( \
1794 LOGIT_FILE_LOGGER_PATH, true, \
1795 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS), \
1796 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN), \
1799#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION(dir, async, days, pattern, max_bytes, max_files) \
1800 logit::Logger::get_instance().add_logger( \
1801 std::make_unique<logit::FileLogger>(dir, async, days, max_bytes, max_files), \
1802 std::make_unique<logit::SimpleLogFormatter>(pattern))
1804#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_SINGLE_MODE(dir, async, days, pattern, max_bytes, max_files) \
1805 logit::Logger::get_instance().add_logger( \
1806 std::make_unique<logit::FileLogger>(dir, async, days, max_bytes, max_files), \
1807 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1810#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX(dir, async, days, pattern, max_bytes, max_files, use_dedicated_executor, queue_capacity, queue_policy) \
1811 logit::Logger::get_instance().add_logger( \
1812 std::make_unique<logit::FileLogger>( \
1813 (dir), (async), (days), (max_bytes), (max_files), \
1814 (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1815 std::make_unique<logit::SimpleLogFormatter>(pattern))
1817#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX_SINGLE_MODE(dir, async, days, pattern, max_bytes, max_files, use_dedicated_executor, queue_capacity, queue_policy) \
1818 logit::Logger::get_instance().add_logger( \
1819 std::make_unique<logit::FileLogger>( \
1820 (dir), (async), (days), (max_bytes), (max_files), \
1821 (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1822 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1825#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_DEDICATED(dir, days, pattern, max_bytes, max_files, queue_capacity, queue_policy) \
1826 LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX((dir), true, (days), (pattern), (max_bytes), (max_files), true, (queue_capacity), (queue_policy))
1828#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_DEDICATED_SINGLE_MODE(dir, days, pattern, max_bytes, max_files, queue_capacity, queue_policy) \
1829 LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX_SINGLE_MODE((dir), true, (days), (pattern), (max_bytes), (max_files), true, (queue_capacity), (queue_policy))
1831#define LOGIT_ADD_FILE_LOGGER_DEFAULT_WITH_ROTATION() \
1832 logit::Logger::get_instance().add_logger( \
1833 std::make_unique<logit::FileLogger>( \
1834 LOGIT_FILE_LOGGER_PATH, true, LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS, \
1835 LOGIT_FILE_LOGGER_MAX_FILE_SIZE_BYTES, LOGIT_FILE_LOGGER_MAX_ROTATED_FILES), \
1836 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN))
1845#define LOGIT_ADD_UNIQUE_FILE_LOGGER(directory, async, auto_delete_days, hash_length, pattern) \
1846 logit::Logger::get_instance().add_logger( \
1847 std::make_unique<logit::UniqueFileLogger>( \
1848 directory, async, auto_delete_days, hash_length), \
1849 std::make_unique<logit::SimpleLogFormatter>(pattern));
1859#define LOGIT_ADD_UNIQUE_FILE_LOGGER_SINGLE_MODE(directory, async, auto_delete_days, hash_length, pattern) \
1860 logit::Logger::get_instance().add_logger( \
1861 std::make_unique<logit::UniqueFileLogger>( \
1862 directory, async, auto_delete_days, hash_length), \
1863 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1867#define LOGIT_ADD_UNIQUE_FILE_LOGGER_CONFIG(config, pattern) \
1868 logit::Logger::get_instance().add_logger( \
1869 std::make_unique<logit::UniqueFileLogger>(config), \
1870 std::make_unique<logit::SimpleLogFormatter>(pattern))
1873#define LOGIT_ADD_UNIQUE_FILE_LOGGER_CONFIG_SINGLE_MODE(config, pattern) \
1874 logit::Logger::get_instance().add_logger( \
1875 std::make_unique<logit::UniqueFileLogger>(config), \
1876 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1880#define LOGIT_ADD_UNIQUE_FILE_LOGGER_EX(directory, async, auto_delete_days, hash_length, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
1881 logit::Logger::get_instance().add_logger( \
1882 std::make_unique<logit::UniqueFileLogger>( \
1883 (directory), (async), (auto_delete_days), (hash_length), \
1884 (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1885 std::make_unique<logit::SimpleLogFormatter>(pattern))
1888#define LOGIT_ADD_UNIQUE_FILE_LOGGER_EX_SINGLE_MODE(directory, async, auto_delete_days, hash_length, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
1889 logit::Logger::get_instance().add_logger( \
1890 std::make_unique<logit::UniqueFileLogger>( \
1891 (directory), (async), (auto_delete_days), (hash_length), \
1892 (use_dedicated_executor), (queue_capacity), (queue_policy)), \
1893 std::make_unique<logit::SimpleLogFormatter>(pattern), \
1897#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEDICATED(directory, auto_delete_days, hash_length, pattern, queue_capacity, queue_policy) \
1898 LOGIT_ADD_UNIQUE_FILE_LOGGER_EX((directory), true, (auto_delete_days), (hash_length), (pattern), true, (queue_capacity), (queue_policy))
1901#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEDICATED_SINGLE_MODE(directory, auto_delete_days, hash_length, pattern, queue_capacity, queue_policy) \
1902 LOGIT_ADD_UNIQUE_FILE_LOGGER_EX_SINGLE_MODE((directory), true, (auto_delete_days), (hash_length), (pattern), true, (queue_capacity), (queue_policy))
1909#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEFAULT() \
1910 logit::Logger::get_instance().add_logger( \
1911 std::make_unique<logit::UniqueFileLogger>( \
1912 LOGIT_UNIQUE_FILE_LOGGER_PATH, true, \
1913 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS), \
1914 std::make_unique<logit::SimpleLogFormatter>(LOGIT_UNIQUE_FILE_LOGGER_PATTERN));
1922#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEFAULT_SINGLE_MODE() \
1923 logit::Logger::get_instance().add_logger( \
1924 std::make_unique<logit::UniqueFileLogger>( \
1925 LOGIT_UNIQUE_FILE_LOGGER_PATH, true, \
1926 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS), \
1927 std::make_unique<logit::SimpleLogFormatter>(LOGIT_UNIQUE_FILE_LOGGER_PATTERN), \
1934#define LOGIT_ADD_CRASH_LOGGER(path, buffer_size) \
1935 logit::Logger::get_instance().add_logger( \
1936 std::make_unique<logit::CrashLogger>( \
1937 logit::CrashLogger::Config{path, buffer_size}), \
1938 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN))
1943#define LOGIT_ADD_CRASH_LOGGER_SINGLE_MODE(path, buffer_size) \
1944 logit::Logger::get_instance().add_logger( \
1945 std::make_unique<logit::CrashLogger>( \
1946 logit::CrashLogger::Config{path, buffer_size}), \
1947 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN), \
1952#define LOGIT_ADD_CRASH_LOGGER_DEFAULT() \
1953 logit::Logger::get_instance().add_logger( \
1954 std::make_unique<logit::CrashLogger>(), \
1955 std::make_unique<logit::SimpleLogFormatter>(LOGIT_FILE_LOGGER_PATTERN))
1961#define LOGIT_ADD_MEMORY_LOGGER(max_records, max_bytes, max_age_ms) \
1962 logit::Logger::get_instance().add_logger( \
1963 std::make_unique<logit::MemoryLogger>( \
1964 logit::MemoryLogger::Config{max_records, max_bytes, max_age_ms}), \
1965 std::make_unique<logit::SimpleLogFormatter>("%v"))
1968#define LOGIT_ADD_MEMORY_LOGGER_SINGLE_MODE(max_records, max_bytes, max_age_ms) \
1969 logit::Logger::get_instance().add_logger( \
1970 std::make_unique<logit::MemoryLogger>( \
1971 logit::MemoryLogger::Config{max_records, max_bytes, max_age_ms}), \
1972 std::make_unique<logit::SimpleLogFormatter>("%v"), \
1976#define LOGIT_ADD_MEMORY_LOGGER_DEFAULT() \
1977 LOGIT_ADD_MEMORY_LOGGER(1000, 1024 * 1024, 24LL * 60 * 60 * 1000)
1980#define LOGIT_ADD_MEMORY_LOGGER_DEFAULT_SINGLE_MODE() \
1981 LOGIT_ADD_MEMORY_LOGGER_SINGLE_MODE(1000, 1024 * 1024, 24LL * 60 * 60 * 1000)
1986#define LOGIT_ADD_WINDOWS_DEBUG(async) \
1987 logit::Logger::get_instance().add_logger( \
1988 std::make_unique<logit::WindowsDebugLogger>(logit::WindowsDebugLogger::Config{async}), \
1989 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN))
1994#define LOGIT_ADD_WINDOWS_DEBUG_SINGLE_MODE(async) \
1995 logit::Logger::get_instance().add_logger( \
1996 std::make_unique<logit::WindowsDebugLogger>(logit::WindowsDebugLogger::Config{async}), \
1997 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), \
2001#define LOGIT_ADD_WINDOWS_DEBUG_CONFIG(config) \
2002 logit::Logger::get_instance().add_logger( \
2003 std::make_unique<logit::WindowsDebugLogger>(config), \
2004 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN))
2007#define LOGIT_ADD_WINDOWS_DEBUG_CONFIG_SINGLE_MODE(config) \
2008 logit::Logger::get_instance().add_logger( \
2009 std::make_unique<logit::WindowsDebugLogger>(config), \
2010 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), \
2014#define LOGIT_ADD_WINDOWS_DEBUG_EX(async, use_dedicated_executor, queue_capacity, queue_policy) \
2015 logit::Logger::get_instance().add_logger( \
2016 std::make_unique<logit::WindowsDebugLogger>( \
2017 (async), (use_dedicated_executor), (queue_capacity), (queue_policy)), \
2018 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN))
2021#define LOGIT_ADD_WINDOWS_DEBUG_EX_SINGLE_MODE(async, use_dedicated_executor, queue_capacity, queue_policy) \
2022 logit::Logger::get_instance().add_logger( \
2023 std::make_unique<logit::WindowsDebugLogger>( \
2024 (async), (use_dedicated_executor), (queue_capacity), (queue_policy)), \
2025 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), \
2029#define LOGIT_ADD_WINDOWS_DEBUG_DEDICATED(queue_capacity, queue_policy) \
2030 LOGIT_ADD_WINDOWS_DEBUG_EX(true, true, (queue_capacity), (queue_policy))
2033#define LOGIT_ADD_WINDOWS_DEBUG_DEDICATED_SINGLE_MODE(queue_capacity, queue_policy) \
2034 LOGIT_ADD_WINDOWS_DEBUG_EX_SINGLE_MODE(true, true, (queue_capacity), (queue_policy))
2037#define LOGIT_ADD_WINDOWS_DEBUG_DEFAULT() \
2038 LOGIT_ADD_WINDOWS_DEBUG(true)
2045#define LOGIT_ADD_SYSLOG(ident, facility, async) \
2046 logit::Logger::get_instance().add_logger( \
2047 std::make_unique<logit::SyslogLogger>(ident, facility, async), \
2048 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2056#define LOGIT_ADD_SYSLOG_SINGLE_MODE(ident, facility, async) \
2057 logit::Logger::get_instance().add_logger( \
2058 std::make_unique<logit::SyslogLogger>(ident, facility, async), \
2059 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2062#define LOGIT_ADD_SYSLOG_CONFIG(config) \
2063 logit::Logger::get_instance().add_logger( \
2064 std::make_unique<logit::SyslogLogger>(config), \
2065 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2068#define LOGIT_ADD_SYSLOG_CONFIG_SINGLE_MODE(config) \
2069 logit::Logger::get_instance().add_logger( \
2070 std::make_unique<logit::SyslogLogger>(config), \
2071 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2074#define LOGIT_ADD_SYSLOG_EX(ident, facility, async, use_dedicated_executor, queue_capacity, queue_policy) \
2075 logit::Logger::get_instance().add_logger( \
2076 std::make_unique<logit::SyslogLogger>( \
2077 (ident), (facility), (async), (use_dedicated_executor), \
2078 (queue_capacity), (queue_policy)), \
2079 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2082#define LOGIT_ADD_SYSLOG_EX_SINGLE_MODE(ident, facility, async, use_dedicated_executor, queue_capacity, queue_policy) \
2083 logit::Logger::get_instance().add_logger( \
2084 std::make_unique<logit::SyslogLogger>( \
2085 (ident), (facility), (async), (use_dedicated_executor), \
2086 (queue_capacity), (queue_policy)), \
2087 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2090#define LOGIT_ADD_SYSLOG_DEDICATED(ident, facility, queue_capacity, queue_policy) \
2091 LOGIT_ADD_SYSLOG_EX((ident), (facility), true, true, (queue_capacity), (queue_policy))
2094#define LOGIT_ADD_SYSLOG_DEDICATED_SINGLE_MODE(ident, facility, queue_capacity, queue_policy) \
2095 LOGIT_ADD_SYSLOG_EX_SINGLE_MODE((ident), (facility), true, true, (queue_capacity), (queue_policy))
2099#define LOGIT_ADD_SYSLOG_DEFAULT() LOGIT_ADD_SYSLOG("log-it", LOG_USER, true)
2105#define LOGIT_ADD_EVENT_LOG(source_wide, async) \
2106 logit::Logger::get_instance().add_logger( \
2107 std::make_unique<logit::EventLogLogger>(source_wide, async), \
2108 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2115#define LOGIT_ADD_EVENT_LOG_SINGLE_MODE(source_wide, async) \
2116 logit::Logger::get_instance().add_logger( \
2117 std::make_unique<logit::EventLogLogger>(source_wide, async), \
2118 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2121#define LOGIT_ADD_EVENT_LOG_CONFIG(config) \
2122 logit::Logger::get_instance().add_logger( \
2123 std::make_unique<logit::EventLogLogger>(config), \
2124 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2127#define LOGIT_ADD_EVENT_LOG_CONFIG_SINGLE_MODE(config) \
2128 logit::Logger::get_instance().add_logger( \
2129 std::make_unique<logit::EventLogLogger>(config), \
2130 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2133#define LOGIT_ADD_EVENT_LOG_EX(source_wide, async, use_dedicated_executor, queue_capacity, queue_policy) \
2134 logit::Logger::get_instance().add_logger( \
2135 std::make_unique<logit::EventLogLogger>( \
2136 (source_wide), (async), (use_dedicated_executor), \
2137 (queue_capacity), (queue_policy)), \
2138 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), false)
2141#define LOGIT_ADD_EVENT_LOG_EX_SINGLE_MODE(source_wide, async, use_dedicated_executor, queue_capacity, queue_policy) \
2142 logit::Logger::get_instance().add_logger( \
2143 std::make_unique<logit::EventLogLogger>( \
2144 (source_wide), (async), (use_dedicated_executor), \
2145 (queue_capacity), (queue_policy)), \
2146 std::make_unique<logit::SimpleLogFormatter>(LOGIT_CONSOLE_PATTERN), true)
2149#define LOGIT_ADD_EVENT_LOG_DEDICATED(source_wide, queue_capacity, queue_policy) \
2150 LOGIT_ADD_EVENT_LOG_EX((source_wide), true, true, (queue_capacity), (queue_policy))
2153#define LOGIT_ADD_EVENT_LOG_DEDICATED_SINGLE_MODE(source_wide, queue_capacity, queue_policy) \
2154 LOGIT_ADD_EVENT_LOG_EX_SINGLE_MODE((source_wide), true, true, (queue_capacity), (queue_policy))
2158#define LOGIT_ADD_EVENT_LOG_DEFAULT() LOGIT_ADD_EVENT_LOG(L"LogIt", true)
2168#define LOGIT_ADD_LOGGER(logger_type, logger_args, formatter_type, formatter_args) \
2169 logit::Logger::get_instance().add_logger( \
2170 std::unique_ptr<logger_type>(new logger_type logger_args), \
2171 std::unique_ptr<formatter_type>(new formatter_type formatter_args), \
2181#define LOGIT_ADD_LOGGER_SINGLE_MODE(logger_type, logger_args, formatter_type, formatter_args) \
2182 logit::Logger::get_instance().add_logger( \
2183 std::unique_ptr<logger_type>(new logger_type logger_args), \
2184 std::unique_ptr<formatter_type>(new formatter_type formatter_args), \
2191#define LOGIT_ADD_CONSOLE(pattern, async) \
2192 logit::Logger::get_instance().add_logger( \
2193 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(async)), \
2194 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2202#define LOGIT_ADD_CONSOLE_SINGLE_MODE(pattern, async) \
2203 logit::Logger::get_instance().add_logger( \
2204 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(async)), \
2205 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2209#define LOGIT_ADD_CONSOLE_CONFIG(config, pattern) \
2210 logit::Logger::get_instance().add_logger( \
2211 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(config)), \
2212 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2216#define LOGIT_ADD_CONSOLE_CONFIG_SINGLE_MODE(config, pattern) \
2217 logit::Logger::get_instance().add_logger( \
2218 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(config)), \
2219 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2223#define LOGIT_ADD_CONSOLE_EX(pattern, async, use_dedicated_executor, queue_capacity, queue_policy) \
2224 logit::Logger::get_instance().add_logger( \
2225 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2226 (async), (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2227 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2231#define LOGIT_ADD_CONSOLE_EX_SINGLE_MODE(pattern, async, use_dedicated_executor, queue_capacity, queue_policy) \
2232 logit::Logger::get_instance().add_logger( \
2233 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2234 (async), (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2235 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2239#define LOGIT_ADD_CONSOLE_DEDICATED(pattern, queue_capacity, queue_policy) \
2240 LOGIT_ADD_CONSOLE_EX((pattern), true, true, (queue_capacity), (queue_policy))
2243#define LOGIT_ADD_CONSOLE_DEDICATED_SINGLE_MODE(pattern, queue_capacity, queue_policy) \
2244 LOGIT_ADD_CONSOLE_EX_SINGLE_MODE((pattern), true, true, (queue_capacity), (queue_policy))
2248#define LOGIT_ADD_CONSOLE_STREAM(stream, pattern, async) \
2249 logit::Logger::get_instance().add_logger( \
2250 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2251 (stream), (async))), \
2252 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2256#define LOGIT_ADD_CONSOLE_STREAM_SINGLE_MODE(stream, pattern, async) \
2257 logit::Logger::get_instance().add_logger( \
2258 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2259 (stream), (async))), \
2260 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2264#define LOGIT_ADD_CONSOLE_STREAM_EX(stream, config, pattern) \
2265 logit::Logger::get_instance().add_logger( \
2266 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2267 (stream), (config))), \
2268 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2272#define LOGIT_ADD_CONSOLE_STREAM_EX_SINGLE_MODE(stream, config, pattern) \
2273 logit::Logger::get_instance().add_logger( \
2274 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger( \
2275 (stream), (config))), \
2276 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2282#define LOGIT_ADD_CONSOLE_DEFAULT() \
2283 logit::Logger::get_instance().add_logger( \
2284 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(true)), \
2285 std::unique_ptr<logit::SimpleLogFormatter>( \
2286 new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2292#define LOGIT_ADD_CONSOLE_DEFAULT_SINGLE_MODE() \
2293 logit::Logger::get_instance().add_logger( \
2294 std::unique_ptr<logit::ConsoleLogger>(new logit::ConsoleLogger(true)), \
2295 std::unique_ptr<logit::SimpleLogFormatter>( \
2296 new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2305#define LOGIT_ADD_FILE_LOGGER(directory, async, auto_delete_days, pattern) \
2306 logit::Logger::get_instance().add_logger( \
2307 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2308 directory, async, auto_delete_days)), \
2309 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2318#define LOGIT_ADD_FILE_LOGGER_SINGLE_MODE(directory, async, auto_delete_days, pattern) \
2319 logit::Logger::get_instance().add_logger( \
2320 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2321 directory, async, auto_delete_days)), \
2322 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2326#define LOGIT_ADD_FILE_LOGGER_CONFIG(config, pattern) \
2327 logit::Logger::get_instance().add_logger( \
2328 std::unique_ptr<logit::FileLogger>(new logit::FileLogger(config)), \
2329 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2332#define LOGIT_ADD_FILE_LOGGER_CONFIG_SINGLE_MODE(config, pattern) \
2333 logit::Logger::get_instance().add_logger( \
2334 std::unique_ptr<logit::FileLogger>(new logit::FileLogger(config)), \
2335 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2339#define LOGIT_ADD_FILE_LOGGER_EX(directory, async, auto_delete_days, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
2340 logit::Logger::get_instance().add_logger( \
2341 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2342 (directory), (async), (auto_delete_days), (use_dedicated_executor), \
2343 (queue_capacity), (queue_policy))), \
2344 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2347#define LOGIT_ADD_FILE_LOGGER_EX_SINGLE_MODE(directory, async, auto_delete_days, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
2348 logit::Logger::get_instance().add_logger( \
2349 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2350 (directory), (async), (auto_delete_days), (use_dedicated_executor), \
2351 (queue_capacity), (queue_policy))), \
2352 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2356#define LOGIT_ADD_FILE_LOGGER_DEDICATED(directory, auto_delete_days, pattern, queue_capacity, queue_policy) \
2357 LOGIT_ADD_FILE_LOGGER_EX((directory), true, (auto_delete_days), (pattern), true, (queue_capacity), (queue_policy))
2360#define LOGIT_ADD_FILE_LOGGER_DEDICATED_SINGLE_MODE(directory, auto_delete_days, pattern, queue_capacity, queue_policy) \
2361 LOGIT_ADD_FILE_LOGGER_EX_SINGLE_MODE((directory), true, (auto_delete_days), (pattern), true, (queue_capacity), (queue_policy))
2366#define LOGIT_ADD_FILE_LOGGER_DEFAULT() \
2367 logit::Logger::get_instance().add_logger( \
2368 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2369 LOGIT_FILE_LOGGER_PATH, true, \
2370 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS)), \
2371 std::unique_ptr<logit::SimpleLogFormatter>( \
2372 new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)))
2377#define LOGIT_ADD_FILE_LOGGER_DEFAULT_SINGLE_MODE() \
2378 logit::Logger::get_instance().add_logger( \
2379 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2380 LOGIT_FILE_LOGGER_PATH, true, \
2381 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS)), \
2382 std::unique_ptr<logit::SimpleLogFormatter>( \
2383 new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)), \
2386#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION(dir, async, days, pattern, max_bytes, max_files) \
2387 logit::Logger::get_instance().add_logger( \
2388 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2389 dir, async, days, max_bytes, max_files)), \
2390 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2392#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_SINGLE_MODE(dir, async, days, pattern, max_bytes, max_files) \
2393 logit::Logger::get_instance().add_logger( \
2394 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2395 dir, async, days, max_bytes, max_files)), \
2396 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2399#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX(dir, async, days, pattern, max_bytes, max_files, use_dedicated_executor, queue_capacity, queue_policy) \
2400 logit::Logger::get_instance().add_logger( \
2401 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2402 (dir), (async), (days), (max_bytes), (max_files), \
2403 (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2404 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2406#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX_SINGLE_MODE(dir, async, days, pattern, max_bytes, max_files, use_dedicated_executor, queue_capacity, queue_policy) \
2407 logit::Logger::get_instance().add_logger( \
2408 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2409 (dir), (async), (days), (max_bytes), (max_files), \
2410 (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2411 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2414#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_DEDICATED(dir, days, pattern, max_bytes, max_files, queue_capacity, queue_policy) \
2415 LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX((dir), true, (days), (pattern), (max_bytes), (max_files), true, (queue_capacity), (queue_policy))
2417#define LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_DEDICATED_SINGLE_MODE(dir, days, pattern, max_bytes, max_files, queue_capacity, queue_policy) \
2418 LOGIT_ADD_FILE_LOGGER_WITH_ROTATION_EX_SINGLE_MODE((dir), true, (days), (pattern), (max_bytes), (max_files), true, (queue_capacity), (queue_policy))
2420#define LOGIT_ADD_FILE_LOGGER_DEFAULT_WITH_ROTATION() \
2421 logit::Logger::get_instance().add_logger( \
2422 std::unique_ptr<logit::FileLogger>(new logit::FileLogger( \
2423 LOGIT_FILE_LOGGER_PATH, true, LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS, \
2424 LOGIT_FILE_LOGGER_MAX_FILE_SIZE_BYTES, LOGIT_FILE_LOGGER_MAX_ROTATED_FILES)), \
2425 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)))
2434#define LOGIT_ADD_UNIQUE_FILE_LOGGER(directory, async, auto_delete_days, hash_length, pattern) \
2435 logit::Logger::get_instance().add_logger( \
2436 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2437 directory, async, auto_delete_days, hash_length)), \
2438 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2448#define LOGIT_ADD_UNIQUE_FILE_LOGGER_SINGLE_MODE(directory, async, auto_delete_days, hash_length, pattern) \
2449 logit::Logger::get_instance().add_logger( \
2450 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2451 directory, async, auto_delete_days, hash_length)), \
2452 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2456#define LOGIT_ADD_UNIQUE_FILE_LOGGER_CONFIG(config, pattern) \
2457 logit::Logger::get_instance().add_logger( \
2458 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger(config)), \
2459 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2462#define LOGIT_ADD_UNIQUE_FILE_LOGGER_CONFIG_SINGLE_MODE(config, pattern) \
2463 logit::Logger::get_instance().add_logger( \
2464 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger(config)), \
2465 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2469#define LOGIT_ADD_UNIQUE_FILE_LOGGER_EX(directory, async, auto_delete_days, hash_length, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
2470 logit::Logger::get_instance().add_logger( \
2471 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2472 (directory), (async), (auto_delete_days), (hash_length), \
2473 (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2474 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)))
2477#define LOGIT_ADD_UNIQUE_FILE_LOGGER_EX_SINGLE_MODE(directory, async, auto_delete_days, hash_length, pattern, use_dedicated_executor, queue_capacity, queue_policy) \
2478 logit::Logger::get_instance().add_logger( \
2479 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2480 (directory), (async), (auto_delete_days), (hash_length), \
2481 (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2482 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(pattern)), \
2486#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEDICATED(directory, auto_delete_days, hash_length, pattern, queue_capacity, queue_policy) \
2487 LOGIT_ADD_UNIQUE_FILE_LOGGER_EX((directory), true, (auto_delete_days), (hash_length), (pattern), true, (queue_capacity), (queue_policy))
2490#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEDICATED_SINGLE_MODE(directory, auto_delete_days, hash_length, pattern, queue_capacity, queue_policy) \
2491 LOGIT_ADD_UNIQUE_FILE_LOGGER_EX_SINGLE_MODE((directory), true, (auto_delete_days), (hash_length), (pattern), true, (queue_capacity), (queue_policy))
2498#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEFAULT() \
2499 logit::Logger::get_instance().add_logger( \
2500 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2501 LOGIT_UNIQUE_FILE_LOGGER_PATH, true, \
2502 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS)), \
2503 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_UNIQUE_FILE_LOGGER_PATTERN)))
2511#define LOGIT_ADD_UNIQUE_FILE_LOGGER_DEFAULT_SINGLE_MODE() \
2512 logit::Logger::get_instance().add_logger( \
2513 std::unique_ptr<logit::UniqueFileLogger>(new logit::UniqueFileLogger( \
2514 LOGIT_UNIQUE_FILE_LOGGER_PATH, true, \
2515 LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS)), \
2516 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_UNIQUE_FILE_LOGGER_PATTERN)), \
2523#define LOGIT_ADD_CRASH_LOGGER(path, buffer_size) \
2524 logit::Logger::get_instance().add_logger( \
2525 std::unique_ptr<logit::CrashLogger>( \
2526 new logit::CrashLogger( \
2527 logit::CrashLogger::Config{path, buffer_size})), \
2528 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)))
2533#define LOGIT_ADD_CRASH_LOGGER_SINGLE_MODE(path, buffer_size) \
2534 logit::Logger::get_instance().add_logger( \
2535 std::unique_ptr<logit::CrashLogger>( \
2536 new logit::CrashLogger( \
2537 logit::CrashLogger::Config{path, buffer_size})), \
2538 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)), \
2543#define LOGIT_ADD_CRASH_LOGGER_DEFAULT() \
2544 logit::Logger::get_instance().add_logger( \
2545 std::unique_ptr<logit::CrashLogger>(new logit::CrashLogger()), \
2546 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_FILE_LOGGER_PATTERN)))
2552#define LOGIT_ADD_MEMORY_LOGGER(max_records, max_bytes, max_age_ms) \
2553 logit::Logger::get_instance().add_logger( \
2554 std::unique_ptr<logit::MemoryLogger>(new logit::MemoryLogger( \
2555 logit::MemoryLogger::Config{max_records, max_bytes, max_age_ms})), \
2556 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter("%v")))
2559#define LOGIT_ADD_MEMORY_LOGGER_SINGLE_MODE(max_records, max_bytes, max_age_ms) \
2560 logit::Logger::get_instance().add_logger( \
2561 std::unique_ptr<logit::MemoryLogger>(new logit::MemoryLogger( \
2562 logit::MemoryLogger::Config{max_records, max_bytes, max_age_ms})), \
2563 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter("%v")), \
2567#define LOGIT_ADD_MEMORY_LOGGER_DEFAULT() \
2568 LOGIT_ADD_MEMORY_LOGGER(1000, 1024 * 1024, 24LL * 60 * 60 * 1000)
2571#define LOGIT_ADD_MEMORY_LOGGER_DEFAULT_SINGLE_MODE() \
2572 LOGIT_ADD_MEMORY_LOGGER_SINGLE_MODE(1000, 1024 * 1024, 24LL * 60 * 60 * 1000)
2577#define LOGIT_ADD_WINDOWS_DEBUG(async) \
2578 logit::Logger::get_instance().add_logger( \
2579 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger( \
2580 logit::WindowsDebugLogger::Config{async})), \
2581 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)))
2586#define LOGIT_ADD_WINDOWS_DEBUG_SINGLE_MODE(async) \
2587 logit::Logger::get_instance().add_logger( \
2588 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger( \
2589 logit::WindowsDebugLogger::Config{async})), \
2590 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2594#define LOGIT_ADD_WINDOWS_DEBUG_CONFIG(config) \
2595 logit::Logger::get_instance().add_logger( \
2596 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger(config)), \
2597 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)))
2600#define LOGIT_ADD_WINDOWS_DEBUG_CONFIG_SINGLE_MODE(config) \
2601 logit::Logger::get_instance().add_logger( \
2602 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger(config)), \
2603 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2607#define LOGIT_ADD_WINDOWS_DEBUG_EX(async, use_dedicated_executor, queue_capacity, queue_policy) \
2608 logit::Logger::get_instance().add_logger( \
2609 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger( \
2610 (async), (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2611 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)))
2614#define LOGIT_ADD_WINDOWS_DEBUG_EX_SINGLE_MODE(async, use_dedicated_executor, queue_capacity, queue_policy) \
2615 logit::Logger::get_instance().add_logger( \
2616 std::unique_ptr<logit::WindowsDebugLogger>(new logit::WindowsDebugLogger( \
2617 (async), (use_dedicated_executor), (queue_capacity), (queue_policy))), \
2618 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2622#define LOGIT_ADD_WINDOWS_DEBUG_DEDICATED(queue_capacity, queue_policy) \
2623 LOGIT_ADD_WINDOWS_DEBUG_EX(true, true, (queue_capacity), (queue_policy))
2626#define LOGIT_ADD_WINDOWS_DEBUG_DEDICATED_SINGLE_MODE(queue_capacity, queue_policy) \
2627 LOGIT_ADD_WINDOWS_DEBUG_EX_SINGLE_MODE(true, true, (queue_capacity), (queue_policy))
2630#define LOGIT_ADD_WINDOWS_DEBUG_DEFAULT() \
2631 LOGIT_ADD_WINDOWS_DEBUG(true)
2638#define LOGIT_ADD_SYSLOG(ident, facility, async) \
2639 logit::Logger::get_instance().add_logger( \
2640 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger(ident, facility, async)), \
2641 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2650#define LOGIT_ADD_SYSLOG_SINGLE_MODE(ident, facility, async) \
2651 logit::Logger::get_instance().add_logger( \
2652 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger(ident, facility, async)), \
2653 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2657#define LOGIT_ADD_SYSLOG_CONFIG(config) \
2658 logit::Logger::get_instance().add_logger( \
2659 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger(config)), \
2660 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2664#define LOGIT_ADD_SYSLOG_CONFIG_SINGLE_MODE(config) \
2665 logit::Logger::get_instance().add_logger( \
2666 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger(config)), \
2667 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2671#define LOGIT_ADD_SYSLOG_EX(ident, facility, async, use_dedicated_executor, queue_capacity, queue_policy) \
2672 logit::Logger::get_instance().add_logger( \
2673 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger( \
2674 (ident), (facility), (async), (use_dedicated_executor), \
2675 (queue_capacity), (queue_policy))), \
2676 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2680#define LOGIT_ADD_SYSLOG_EX_SINGLE_MODE(ident, facility, async, use_dedicated_executor, queue_capacity, queue_policy) \
2681 logit::Logger::get_instance().add_logger( \
2682 std::unique_ptr<logit::SyslogLogger>(new logit::SyslogLogger( \
2683 (ident), (facility), (async), (use_dedicated_executor), \
2684 (queue_capacity), (queue_policy))), \
2685 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2689#define LOGIT_ADD_SYSLOG_DEDICATED(ident, facility, queue_capacity, queue_policy) \
2690 LOGIT_ADD_SYSLOG_EX((ident), (facility), true, true, (queue_capacity), (queue_policy))
2693#define LOGIT_ADD_SYSLOG_DEDICATED_SINGLE_MODE(ident, facility, queue_capacity, queue_policy) \
2694 LOGIT_ADD_SYSLOG_EX_SINGLE_MODE((ident), (facility), true, true, (queue_capacity), (queue_policy))
2698#define LOGIT_ADD_SYSLOG_DEFAULT() LOGIT_ADD_SYSLOG("log-it", LOG_USER, true)
2704#define LOGIT_ADD_EVENT_LOG(source_wide, async) \
2705 logit::Logger::get_instance().add_logger( \
2706 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger(source_wide, async)), \
2707 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2715#define LOGIT_ADD_EVENT_LOG_SINGLE_MODE(source_wide, async) \
2716 logit::Logger::get_instance().add_logger( \
2717 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger(source_wide, async)), \
2718 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2722#define LOGIT_ADD_EVENT_LOG_CONFIG(config) \
2723 logit::Logger::get_instance().add_logger( \
2724 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger(config)), \
2725 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2729#define LOGIT_ADD_EVENT_LOG_CONFIG_SINGLE_MODE(config) \
2730 logit::Logger::get_instance().add_logger( \
2731 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger(config)), \
2732 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2736#define LOGIT_ADD_EVENT_LOG_EX(source_wide, async, use_dedicated_executor, queue_capacity, queue_policy) \
2737 logit::Logger::get_instance().add_logger( \
2738 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger( \
2739 (source_wide), (async), (use_dedicated_executor), \
2740 (queue_capacity), (queue_policy))), \
2741 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2745#define LOGIT_ADD_EVENT_LOG_EX_SINGLE_MODE(source_wide, async, use_dedicated_executor, queue_capacity, queue_policy) \
2746 logit::Logger::get_instance().add_logger( \
2747 std::unique_ptr<logit::EventLogLogger>(new logit::EventLogLogger( \
2748 (source_wide), (async), (use_dedicated_executor), \
2749 (queue_capacity), (queue_policy))), \
2750 std::unique_ptr<logit::SimpleLogFormatter>(new logit::SimpleLogFormatter(LOGIT_CONSOLE_PATTERN)), \
2754#define LOGIT_ADD_EVENT_LOG_DEDICATED(source_wide, queue_capacity, queue_policy) \
2755 LOGIT_ADD_EVENT_LOG_EX((source_wide), true, true, (queue_capacity), (queue_policy))
2758#define LOGIT_ADD_EVENT_LOG_DEDICATED_SINGLE_MODE(source_wide, queue_capacity, queue_policy) \
2759 LOGIT_ADD_EVENT_LOG_EX_SINGLE_MODE((source_wide), true, true, (queue_capacity), (queue_policy))
2763#define LOGIT_ADD_EVENT_LOG_DEFAULT() LOGIT_ADD_EVENT_LOG(L"LogIt", true)
2775#define LOGIT_GET_STRING_PARAM(logger_index, param) \
2776 logit::Logger::get_instance().get_string_param(logger_index, param)
2782#define LOGIT_GET_INT_PARAM(logger_index, param) \
2783 logit::Logger::get_instance().get_int_param(logger_index, param)
2789#define LOGIT_GET_FLOAT_PARAM(logger_index, param) \
2790 logit::Logger::get_instance().get_float_param(logger_index, param)
2795#define LOGIT_GET_LAST_FILE_NAME(logger_index) \
2796 logit::Logger::get_instance().get_string_param(logger_index, logit::LoggerParam::LastFileName)
2801#define LOGIT_GET_LAST_FILE_PATH(logger_index) \
2802 logit::Logger::get_instance().get_string_param(logger_index, logit::LoggerParam::LastFilePath)
2807#define LOGIT_GET_LAST_LOG_TIMESTAMP(logger_index) \
2808 logit::Logger::get_instance().get_int_param(logger_index, logit::LoggerParam::LastLogTimestamp)
2813#define LOGIT_GET_TIME_SINCE_LAST_LOG(logger_index) \
2814 logit::Logger::get_instance().get_float_param(logger_index, logit::LoggerParam::TimeSinceLastLog)
2819#define LOGIT_GET_BUFFERED_STRINGS(logger_index) \
2820 logit::Logger::get_instance().get_buffered_strings(logger_index)
2825#define LOGIT_GET_BUFFERED_ENTRIES(logger_index) \
2826 logit::Logger::get_instance().get_buffered_entries(logger_index)
2831#define LOGIT_LIST_LOG_FILES(logger_index) \
2832 logit::Logger::get_instance().list_log_files(logger_index)
2838#define LOGIT_READ_LOG_FILE(logger_index, path) \
2839 logit::Logger::get_instance().read_log_file(logger_index, path)
2845#define LOGIT_READ_LOG_FILES(logger_index, paths) \
2846 logit::Logger::get_instance().read_log_files(logger_index, paths)
2851#define LOGIT_CLEAR_LOGGER(logger_index) \
2852 logit::Logger::get_instance().clear_logger(logger_index)
2858#define LOGIT_CLEAR_LOGGER_EX(logger_index, options) \
2859 logit::Logger::get_instance().clear_logger(logger_index, options)
2863#define LOGIT_CLEAR_ALL_LOGGERS() \
2864 logit::Logger::get_instance().clear_all_loggers()
2869#define LOGIT_CLEAR_ALL_LOGGERS_EX(options) \
2870 logit::Logger::get_instance().clear_all_loggers(options)
2875#define LOGIT_SET_LOGGER_ENABLED(logger_index, enabled) \
2876 logit::Logger::get_instance().set_logger_enabled(logger_index, enabled)
2881#define LOGIT_IS_LOGGER_ENABLED(logger_index) \
2882 logit::Logger::get_instance().is_logger_enabled(logger_index)
2887#define LOGIT_SET_SINGLE_MODE(logger_index, single_mode) \
2888 logit::Logger::get_instance().set_logger_single_mode(logger_index, single_mode)
2893#define LOGIT_SET_TIME_OFFSET(logger_index, offset_ms) \
2894 logit::Logger::get_instance().set_timestamp_offset(logger_index, offset_ms)
2899#define LOGIT_SET_LOG_LEVEL_TO(logger_index, level) \
2900 logit::Logger::get_instance().set_log_level(logger_index, level)
2904#define LOGIT_SET_LOG_LEVEL(level) \
2905 logit::Logger::get_instance().set_log_level(level)
2910#define LOGIT_GET_LOG_LEVEL(logger_index) \
2911 logit::Logger::get_instance().get_log_level(logger_index)
2916#define LOGIT_IS_SINGLE_MODE(logger_index) \
2917 logit::Logger::get_instance().is_logger_single_mode(logger_index)
2927#define LOGIT_SET_MAX_QUEUE(size) \
2928 logit::detail::TaskExecutor::get_instance().set_max_queue_size(size)
2931#define LOGIT_QUEUE_DROP_NEWEST logit::QueuePolicy::DropNewest
2934#define LOGIT_QUEUE_DROP_OLDEST logit::QueuePolicy::DropOldest
2937#define LOGIT_QUEUE_DROP LOGIT_QUEUE_DROP_NEWEST
2940#define LOGIT_QUEUE_BLOCK logit::QueuePolicy::Block
2944#define LOGIT_SET_QUEUE_POLICY(mode) \
2945 logit::detail::TaskExecutor::get_instance().set_queue_policy(mode)
2948#define LOGIT_GET_DROPPED_TASKS() \
2949 logit::detail::TaskExecutor::get_instance().dropped_tasks()
2952#define LOGIT_RESET_DROPPED_TASKS() \
2953 logit::detail::TaskExecutor::get_instance().reset_dropped_tasks()
2958#define LOGIT_WAIT() logit::Logger::get_instance().wait()
2961#define LOGIT_SHUTDOWN() logit::Logger::get_instance().shutdown()
2969#define LOGIT_GET_LOGGER_AS(logger_index, logger_type) \
2970 (::logit::Logger::get_instance().get_logger_as<logger_type>((logger_index)))
2976#define LOGIT_WITH_LOGGER_AS(logger_index, logger_type, var_name) \
2977 if (auto* var_name = LOGIT_GET_LOGGER_AS((logger_index), logger_type))
2982#define LOGIT_GET_LOG_READER(logger_index) \
2983 LOGIT_GET_LOGGER_AS((logger_index), ::logit::ILogReader)
2988#define LOGIT_WITH_LOG_READER(logger_index, var_name) \
2989 if (auto* var_name = LOGIT_GET_LOG_READER((logger_index)))
2997#define LOGIT_READ_RANGE(logger_index, from_ms, to_ms, limit) \
2998 ([](int _idx, int64_t _from, int64_t _to, std::size_t _limit) { \
2999 auto* _reader = LOGIT_GET_LOG_READER(_idx); \
3001 ? _reader->read_range(_from, _to, _limit) \
3002 : std::vector<::logit::LogRecordSnapshot>{}; \
3003 }((logger_index), (from_ms), (to_ms), (limit)))
3011#define LOGIT_READ_RECENT(logger_index, limit, period_ms, order) \
3012 ([](int _idx, std::size_t _limit, int64_t _period_ms, ::logit::LogReadOrder _order) { \
3013 auto* _reader = LOGIT_GET_LOG_READER(_idx); \
3015 ? _reader->read_recent(_limit, _period_ms, _order) \
3016 : std::vector<::logit::LogRecordSnapshot>{}; \
3017 }((logger_index), (limit), (period_ms), (order)))
3024#define LOGIT_READ_RECENT_ASC(logger_index, limit, period_ms) \
3025 LOGIT_READ_RECENT((logger_index), (limit), (period_ms), ::logit::LogReadOrder::Ascending)
3032#define LOGIT_READ_RECENT_DESC(logger_index, limit, period_ms) \
3033 LOGIT_READ_RECENT((logger_index), (limit), (period_ms), ::logit::LogReadOrder::Descending)
3038#define LOGIT_GET_LOG_SUBSCRIBER(logger_index) \
3039 LOGIT_GET_LOGGER_AS((logger_index), ::logit::ILogSubscriber)
3044#define LOGIT_WITH_LOG_SUBSCRIBER(logger_index, var_name) \
3045 if (auto* var_name = LOGIT_GET_LOG_SUBSCRIBER((logger_index)))
3051#define LOGIT_ADD_LOG_CALLBACK(logger_index, callback) \
3052 ([](int _idx, ::logit::ILogSubscriber::Callback _cb) -> uint64_t { \
3053 auto* _subscriber = LOGIT_GET_LOG_SUBSCRIBER(_idx); \
3054 return _subscriber ? _subscriber->add_log_callback(std::move(_cb)) : 0; \
3055 }((logger_index), (callback)))
3061#define LOGIT_REMOVE_LOG_CALLBACK(logger_index, callback_id) \
3062 ([](int _idx, uint64_t _id) -> bool { \
3063 auto* _subscriber = LOGIT_GET_LOG_SUBSCRIBER(_idx); \
3064 return _subscriber ? _subscriber->remove_log_callback(_id) : false; \
3065 }((logger_index), (callback_id)))
Defines the LogStream class for stream-like logging functionality.
Defines the Logger class for managing multiple loggers and formatters.
RAII timer that logs the duration of a scope.
Configuration macros for the LogIt logging system.
#define LOGIT_LEVEL_FATAL
#define LOGIT_LEVEL_TRACE
#define LOGIT_LEVEL_DEBUG
#define LOGIT_LEVEL_ERROR
@ LOG_LVL_TRACE
Trace level logging.
@ LOG_LVL_ERROR
Error level logging.
@ LOG_LVL_INFO
Information level logging.
@ LOG_LVL_FATAL
Fatal level logging.
@ LOG_LVL_DEBUG
Debug level logging.
@ LOG_LVL_WARN
Warning level logging.
Internal helpers shared by the system error logging macros.
Aggregates the public utilities module.