microfmt
Zero-allocation C++ formatting for constrained environments
Loading...
Searching...
No Matches
macros.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Jarosław Pelczar <jarek@jpelczar.com>
2//
3// SPDX-License-Identifier: BSD-2-Clause
4
5#pragma once
6
9#include "logger.hpp"
10#include <source_location>
11
12// ============================================================================
13// Targeted Logger Macros (MICROFMT_LOGGER_*)
14// ============================================================================
15
16#define MICROFMT_LOGGER_LOG(logger_instance, lvl, fmt, ...) \
17 do { \
18 if ((logger_instance).should_log(lvl)) { \
19 (logger_instance).log_loc(::std::source_location::current(), lvl, fmt __VA_OPT__(, ) __VA_ARGS__); \
20 } \
21 } while (0)
22
23#define MICROFMT_LOGGER_TRACE(logger, fmt, ...) \
24 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::trace, fmt, __VA_ARGS__)
25#define MICROFMT_LOGGER_DEBUG(logger, fmt, ...) \
26 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::debug, fmt, __VA_ARGS__)
27#define MICROFMT_LOGGER_INFO(logger, fmt, ...) \
28 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::info, fmt, __VA_ARGS__)
29#define MICROFMT_LOGGER_WARN(logger, fmt, ...) \
30 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::warn, fmt, __VA_ARGS__)
31#define MICROFMT_LOGGER_ERROR(logger, fmt, ...) \
32 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::err, fmt, __VA_ARGS__)
33#define MICROFMT_LOGGER_CRITICAL(logger, fmt, ...) \
34 MICROFMT_LOGGER_LOG(logger, ::microfmt::log::level::critical, fmt, __VA_ARGS__)
35
36// ============================================================================
37// Default Logger Macros (MICROFMT_LOG_*)
38// ============================================================================
39
40#if defined(MICROFMT_DEFAULT_LOGGER)
41
42#define MICROFMT_LOG_TRACE(fmt, ...) MICROFMT_LOGGER_TRACE(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
43#define MICROFMT_LOG_DEBUG(fmt, ...) MICROFMT_LOGGER_DEBUG(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
44#define MICROFMT_LOG_INFO(fmt, ...) MICROFMT_LOGGER_INFO(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
45#define MICROFMT_LOG_WARN(fmt, ...) MICROFMT_LOGGER_WARN(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
46#define MICROFMT_LOG_ERROR(fmt, ...) MICROFMT_LOGGER_ERROR(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
47#define MICROFMT_LOG_CRITICAL(fmt, ...) MICROFMT_LOGGER_CRITICAL(MICROFMT_DEFAULT_LOGGER, fmt, __VA_ARGS__)
48
49#elif defined(MICROFMT_ENABLE_DEFAULT_LOGGER)
50
51#define MICROFMT_LOG_TRACE(fmt, ...) \
52 do { \
53 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
54 MICROFMT_LOGGER_TRACE(*microfmt_default_logger, fmt, __VA_ARGS__); \
55 } \
56 } while (0)
57#define MICROFMT_LOG_DEBUG(fmt, ...) \
58 do { \
59 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
60 MICROFMT_LOGGER_DEBUG(*microfmt_default_logger, fmt, __VA_ARGS__); \
61 } \
62 } while (0)
63#define MICROFMT_LOG_INFO(fmt, ...) \
64 do { \
65 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
66 MICROFMT_LOGGER_INFO(*microfmt_default_logger, fmt, __VA_ARGS__); \
67 } \
68 } while (0)
69#define MICROFMT_LOG_WARN(fmt, ...) \
70 do { \
71 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
72 MICROFMT_LOGGER_WARN(*microfmt_default_logger, fmt, __VA_ARGS__); \
73 } \
74 } while (0)
75#define MICROFMT_LOG_ERROR(fmt, ...) \
76 do { \
77 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
78 MICROFMT_LOGGER_ERROR(*microfmt_default_logger, fmt, __VA_ARGS__); \
79 } \
80 } while (0)
81#define MICROFMT_LOG_CRITICAL(fmt, ...) \
82 do { \
83 if (auto *microfmt_default_logger = ::microfmt::log::default_logger()) { \
84 MICROFMT_LOGGER_CRITICAL(*microfmt_default_logger, fmt, __VA_ARGS__); \
85 } \
86 } while (0)
87
88#endif
Configurable structured loggers and helper functions.