From fce96703de7edb9fb56d47a7ebe533712f12afab Mon Sep 17 00:00:00 2001 From: Aster Seker Date: Sun, 14 Sep 2025 04:01:01 +0300 Subject: [PATCH 1/3] fix(macros): add portable compiled level check --- include/logit_cpp/logit/LogMacros.hpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/include/logit_cpp/logit/LogMacros.hpp b/include/logit_cpp/logit/LogMacros.hpp index 6823b5a..467a44c 100644 --- a/include/logit_cpp/logit/LogMacros.hpp +++ b/include/logit_cpp/logit/LogMacros.hpp @@ -26,6 +26,12 @@ # define LOGIT_COMPILED_LEVEL logit::LogLevel::LOG_LVL_TRACE #endif +#if __cplusplus >= 201703L +# define LOGIT_IF_COMPILED_LEVEL(level) if constexpr (LOGIT_COMPILED_LEVEL <= (level)) +#else +# define LOGIT_IF_COMPILED_LEVEL(level) if (LOGIT_COMPILED_LEVEL <= (level)) +#endif + //------------------------------------------------------------------------------ // Stream-based logging macros for various levels @@ -84,7 +90,7 @@ /// \param format The log message format. #define LOGIT_LOG_AND_RETURN_NOARGS(level, format) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ @@ -97,7 +103,7 @@ /// \param format The log message format. #define LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(level, index, format) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ @@ -114,7 +120,7 @@ /// \param ... The arguments to log. #define LOGIT_LOG_AND_RETURN(level, format, arg_names, ...) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ @@ -128,7 +134,7 @@ /// \details This macro logs the raw arguments without applying any formatting to them. #define LOGIT_LOG_AND_RETURN_PRINT(level, arg_names, ...) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ @@ -143,7 +149,7 @@ /// \param ... The arguments to log. #define LOGIT_LOG_AND_RETURN_WITH_INDEX(level, index, format, arg_names, ...) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ @@ -158,7 +164,7 @@ /// \details This macro logs the raw arguments without applying any formatting to them to a specific logger. #define LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(level, index, arg_names, ...) \ do { \ - if constexpr (LOGIT_COMPILED_LEVEL <= level) \ + LOGIT_IF_COMPILED_LEVEL(level) \ logit::Logger::get_instance().log_and_return( \ logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ From 6e696822b5a35cbfc0dce51e13c1f8533b6dc330 Mon Sep 17 00:00:00 2001 From: Aster Seker Date: Sun, 14 Sep 2025 04:48:15 +0300 Subject: [PATCH 2/3] fix(macros): strip disabled log levels for pre-C++17 --- include/logit_cpp/logit/LogMacros.hpp | 145 +++++++++++++++++++++++++- tests/compiled_level_test.cpp | 2 +- 2 files changed, 142 insertions(+), 5 deletions(-) diff --git a/include/logit_cpp/logit/LogMacros.hpp b/include/logit_cpp/logit/LogMacros.hpp index 467a44c..cecebc9 100644 --- a/include/logit_cpp/logit/LogMacros.hpp +++ b/include/logit_cpp/logit/LogMacros.hpp @@ -22,14 +22,19 @@ /// \param value The enum value. #define LOGIT_ENUM_TO_STR_CASE(value) case value: return #value; +#define LOGIT_LEVEL_TRACE 0 +#define LOGIT_LEVEL_DEBUG 1 +#define LOGIT_LEVEL_INFO 2 +#define LOGIT_LEVEL_WARN 3 +#define LOGIT_LEVEL_ERROR 4 +#define LOGIT_LEVEL_FATAL 5 + #ifndef LOGIT_COMPILED_LEVEL -# define LOGIT_COMPILED_LEVEL logit::LogLevel::LOG_LVL_TRACE +# define LOGIT_COMPILED_LEVEL LOGIT_LEVEL_TRACE #endif #if __cplusplus >= 201703L -# define LOGIT_IF_COMPILED_LEVEL(level) if constexpr (LOGIT_COMPILED_LEVEL <= (level)) -#else -# define LOGIT_IF_COMPILED_LEVEL(level) if (LOGIT_COMPILED_LEVEL <= (level)) +# define LOGIT_IF_COMPILED_LEVEL(level) if constexpr (LOGIT_COMPILED_LEVEL <= static_cast(level)) #endif //------------------------------------------------------------------------------ @@ -88,6 +93,7 @@ /// \brief Logs a message without arguments. /// \param level The log level. /// \param format The log message format. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN_NOARGS(level, format) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -96,11 +102,21 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, format, {}, -1, false}); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN_NOARGS(level, format) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, format, {}, -1, false}); \ + } while (0) +#endif /// \brief Logs a message to a specific logger without arguments. /// \param level The log level. /// \param index The index of the logger to log to. /// \param format The log message format. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(level, index, format) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -109,6 +125,15 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, format, {}, index}); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN_NOARGS_WITH_INDEX(level, index, format) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, format, {}, index}); \ + } while (0) +#endif //------------------------------------------------------------------------------ // Macros for logging with arguments @@ -118,6 +143,7 @@ /// \param format The log message format. /// \param arg_names The names of the arguments. /// \param ... The arguments to log. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN(level, format, arg_names, ...) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -126,12 +152,22 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, format, arg_names, -1, false}, __VA_ARGS__); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN(level, format, arg_names, ...) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, format, arg_names, -1, false}, __VA_ARGS__); \ + } while (0) +#endif /// \brief Logs a message with arguments, but prints them without using a format string. /// \param level The log level. /// \param arg_names The names of the arguments. /// \param ... The arguments to log. /// \details This macro logs the raw arguments without applying any formatting to them. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN_PRINT(level, arg_names, ...) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -140,6 +176,15 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, {}, arg_names, -1, true}, __VA_ARGS__); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN_PRINT(level, arg_names, ...) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, {}, arg_names, -1, true}, __VA_ARGS__); \ + } while (0) +#endif /// \brief Logs a message with arguments to a specific logger. /// \param level The log level. @@ -147,6 +192,7 @@ /// \param format The log message format. /// \param arg_names The names of the arguments. /// \param ... The arguments to log. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN_WITH_INDEX(level, index, format, arg_names, ...) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -155,6 +201,15 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, format, arg_names, index, false}, __VA_ARGS__); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN_WITH_INDEX(level, index, format, arg_names, ...) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, format, arg_names, index, false}, __VA_ARGS__); \ + } while (0) +#endif /// \brief Logs a message with arguments to a specific logger, but prints them without using a format string. /// \param level The log level. @@ -162,6 +217,7 @@ /// \param arg_names The names of the arguments. /// \param ... The arguments to log. /// \details This macro logs the raw arguments without applying any formatting to them to a specific logger. +#if __cplusplus >= 201703L #define LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(level, index, arg_names, ...) \ do { \ LOGIT_IF_COMPILED_LEVEL(level) \ @@ -170,10 +226,20 @@ logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ LOGIT_FUNCTION, {}, arg_names, index, true}, __VA_ARGS__); \ } while (0) +#else +#define LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(level, index, arg_names, ...) \ + do { \ + logit::Logger::get_instance().log_and_return( \ + logit::LogRecord{level, LOGIT_CURRENT_TIMESTAMP_MS(), \ + logit::make_relative(__FILE__, LOGIT_BASE_PATH), __LINE__, \ + LOGIT_FUNCTION, {}, arg_names, index, true}, __VA_ARGS__); \ + } while (0) +#endif //------------------------------------------------------------------------------ // Macros for each log level +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE // TRACE level macros #define LOGIT_TRACE(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_TRACE, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_TRACE0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {}) @@ -193,7 +259,14 @@ #define LOGIT_FORMAT_TRACE_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_TRACE_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_TRACE, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_TRACE(...) do { } while (0) +#define LOGIT_TRACE0() do { } while (0) +#define LOGIT_TRACE_TO(index, ...) do { } while (0) +#define LOGIT_TRACE0_TO(index) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO // INFO level macros #define LOGIT_INFO(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_INFO, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_INFO0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {}) @@ -213,7 +286,14 @@ #define LOGIT_FORMAT_INFO_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_INFO_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_INFO, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_INFO(...) do { } while (0) +#define LOGIT_INFO0() do { } while (0) +#define LOGIT_INFO_TO(index, ...) do { } while (0) +#define LOGIT_INFO0_TO(index) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG // DEBUG level macros #define LOGIT_DEBUG(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_DEBUG, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_DEBUG0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {}) @@ -233,7 +313,14 @@ #define LOGIT_FORMAT_DEBUG_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_DEBUG_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_DEBUG, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_DEBUG(...) do { } while (0) +#define LOGIT_DEBUG0() do { } while (0) +#define LOGIT_DEBUG_TO(index, ...) do { } while (0) +#define LOGIT_DEBUG0_TO(index) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN // WARN level macros #define LOGIT_WARN(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_WARN, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_WARN0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {}) @@ -253,7 +340,14 @@ #define LOGIT_FORMAT_WARN_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_WARN_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_WARN, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_WARN(...) do { } while (0) +#define LOGIT_WARN0() do { } while (0) +#define LOGIT_WARN_TO(index, ...) do { } while (0) +#define LOGIT_WARN0_TO(index) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR // ERROR level macros #define LOGIT_ERROR(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_ERROR, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_ERROR0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {}) @@ -273,7 +367,14 @@ #define LOGIT_FORMAT_ERROR_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_ERROR_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_ERROR, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_ERROR(...) do { } while (0) +#define LOGIT_ERROR0() do { } while (0) +#define LOGIT_ERROR_TO(index, ...) do { } while (0) +#define LOGIT_ERROR0_TO(index) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL // FATAL level macros #define LOGIT_FATAL(...) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_FATAL, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_FATAL0() LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {}) @@ -293,6 +394,12 @@ #define LOGIT_FORMAT_FATAL_TO(index, fmt, ...) LOGIT_LOG_AND_RETURN_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_FATAL_TO(index, ...) LOGIT_LOG_AND_RETURN_PRINT_WITH_INDEX(logit::LogLevel::LOG_LVL_FATAL, index, #__VA_ARGS__, __VA_ARGS__) #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__)) +#else +#define LOGIT_FATAL(...) do { } while (0) +#define LOGIT_FATAL0() do { } while (0) +#define LOGIT_FATAL_TO(index, ...) do { } while (0) +#define LOGIT_FATAL0_TO(index) do { } while (0) +#endif //------------------------------------------------------------------------------ // Conditional logging macros (logging based on a condition) @@ -301,6 +408,7 @@ /// Macros for logging based on conditions. /// \{ +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_TRACE // TRACE level conditional macros #define LOGIT_TRACE_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_TRACE, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_TRACE0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, {}) @@ -310,7 +418,12 @@ #define LOGIT_FORMAT_TRACE_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_TRACE, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_TRACE_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, fmt) #define LOGIT_PRINTF_TRACE_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_TRACE, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_TRACE_IF(condition, ...) do { } while (0) +#define LOGIT_TRACE0_IF(condition) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO // INFO level conditional macros #define LOGIT_INFO_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_INFO, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_INFO0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, {}) @@ -320,7 +433,12 @@ #define LOGIT_FORMAT_INFO_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_INFO, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_INFO_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, fmt) #define LOGIT_PRINTF_INFO_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_INFO, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_INFO_IF(condition, ...) do { } while (0) +#define LOGIT_INFO0_IF(condition) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG // DEBUG level conditional macros #define LOGIT_DEBUG_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_DEBUG, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_DEBUG0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, {}) @@ -330,7 +448,12 @@ #define LOGIT_FORMAT_DEBUG_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_DEBUG, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_DEBUG_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, fmt) #define LOGIT_PRINTF_DEBUG_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_DEBUG, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_DEBUG_IF(condition, ...) do { } while (0) +#define LOGIT_DEBUG0_IF(condition) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN // WARN level conditional macros #define LOGIT_WARN_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_WARN, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_WARN0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, {}) @@ -340,7 +463,12 @@ #define LOGIT_FORMAT_WARN_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_WARN, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_WARN_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, fmt) #define LOGIT_PRINTF_WARN_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_WARN, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_WARN_IF(condition, ...) do { } while (0) +#define LOGIT_WARN0_IF(condition) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR // ERROR level conditional macros #define LOGIT_ERROR_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_ERROR, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_ERROR0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, {}) @@ -350,7 +478,12 @@ #define LOGIT_FORMAT_ERROR_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_ERROR, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_ERROR_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, fmt) #define LOGIT_PRINTF_ERROR_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_ERROR, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_ERROR_IF(condition, ...) do { } while (0) +#define LOGIT_ERROR0_IF(condition) do { } while (0) +#endif +#if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL // FATAL level conditional macros #define LOGIT_FATAL_IF(condition, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_FATAL, {}, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_FATAL0_IF(condition) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, {}) @@ -360,6 +493,10 @@ #define LOGIT_FORMAT_FATAL_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN(logit::LogLevel::LOG_LVL_FATAL, fmt, #__VA_ARGS__, __VA_ARGS__) #define LOGIT_PRINT_FATAL_IF(condition, fmt) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, fmt) #define LOGIT_PRINTF_FATAL_IF(condition, fmt, ...) if (condition) LOGIT_LOG_AND_RETURN_NOARGS(logit::LogLevel::LOG_LVL_FATAL, logit::format(fmt, __VA_ARGS__)) +#else +#define LOGIT_FATAL_IF(condition, ...) do { } while (0) +#define LOGIT_FATAL0_IF(condition) do { } while (0) +#endif //------------------------------------------------------------------------------ // Shorter versions of the macros when LOGIT_SHORT_NAME is defined diff --git a/tests/compiled_level_test.cpp b/tests/compiled_level_test.cpp index de7e3de..8f93199 100644 --- a/tests/compiled_level_test.cpp +++ b/tests/compiled_level_test.cpp @@ -1,4 +1,4 @@ -#define LOGIT_COMPILED_LEVEL logit::LogLevel::LOG_LVL_INFO +#define LOGIT_COMPILED_LEVEL LOGIT_LEVEL_INFO #include template From d22aa8c1d01a2751f441a6de798c9086e175189b Mon Sep 17 00:00:00 2001 From: Aster Seker Date: Sun, 14 Sep 2025 04:48:21 +0300 Subject: [PATCH 3/3] fix(macros): add no-op variants for disabled levels --- include/logit_cpp/logit/LogMacros.hpp | 108 ++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/include/logit_cpp/logit/LogMacros.hpp b/include/logit_cpp/logit/LogMacros.hpp index cecebc9..e4adf57 100644 --- a/include/logit_cpp/logit/LogMacros.hpp +++ b/include/logit_cpp/logit/LogMacros.hpp @@ -262,8 +262,20 @@ #else #define LOGIT_TRACE(...) do { } while (0) #define LOGIT_TRACE0() do { } while (0) +#define LOGIT_0TRACE() do { } while (0) +#define LOGIT_0_TRACE() do { } while (0) +#define LOGIT_NOARGS_TRACE() do { } while (0) +#define LOGIT_FORMAT_TRACE(fmt, ...) do { } while (0) +#define LOGIT_PRINT_TRACE(...) do { } while (0) +#define LOGIT_PRINTF_TRACE(fmt, ...) do { } while (0) #define LOGIT_TRACE_TO(index, ...) do { } while (0) #define LOGIT_TRACE0_TO(index) do { } while (0) +#define LOGIT_0TRACE_TO(index) do { } while (0) +#define LOGIT_0_TRACE_TO(index) do { } while (0) +#define LOGIT_NOARGS_TRACE_TO(index) do { } while (0) +#define LOGIT_FORMAT_TRACE_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_TRACE_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_TRACE_TO(index, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO @@ -289,8 +301,20 @@ #else #define LOGIT_INFO(...) do { } while (0) #define LOGIT_INFO0() do { } while (0) +#define LOGIT_0INFO() do { } while (0) +#define LOGIT_0_INFO() do { } while (0) +#define LOGIT_NOARGS_INFO() do { } while (0) +#define LOGIT_FORMAT_INFO(fmt, ...) do { } while (0) +#define LOGIT_PRINT_INFO(...) do { } while (0) +#define LOGIT_PRINTF_INFO(fmt, ...) do { } while (0) #define LOGIT_INFO_TO(index, ...) do { } while (0) #define LOGIT_INFO0_TO(index) do { } while (0) +#define LOGIT_0INFO_TO(index) do { } while (0) +#define LOGIT_0_INFO_TO(index) do { } while (0) +#define LOGIT_NOARGS_INFO_TO(index) do { } while (0) +#define LOGIT_FORMAT_INFO_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_INFO_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_INFO_TO(index, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG @@ -316,8 +340,20 @@ #else #define LOGIT_DEBUG(...) do { } while (0) #define LOGIT_DEBUG0() do { } while (0) +#define LOGIT_0DEBUG() do { } while (0) +#define LOGIT_0_DEBUG() do { } while (0) +#define LOGIT_NOARGS_DEBUG() do { } while (0) +#define LOGIT_FORMAT_DEBUG(fmt, ...) do { } while (0) +#define LOGIT_PRINT_DEBUG(...) do { } while (0) +#define LOGIT_PRINTF_DEBUG(fmt, ...) do { } while (0) #define LOGIT_DEBUG_TO(index, ...) do { } while (0) #define LOGIT_DEBUG0_TO(index) do { } while (0) +#define LOGIT_0DEBUG_TO(index) do { } while (0) +#define LOGIT_0_DEBUG_TO(index) do { } while (0) +#define LOGIT_NOARGS_DEBUG_TO(index) do { } while (0) +#define LOGIT_FORMAT_DEBUG_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_DEBUG_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_DEBUG_TO(index, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN @@ -343,8 +379,20 @@ #else #define LOGIT_WARN(...) do { } while (0) #define LOGIT_WARN0() do { } while (0) +#define LOGIT_0WARN() do { } while (0) +#define LOGIT_0_WARN() do { } while (0) +#define LOGIT_NOARGS_WARN() do { } while (0) +#define LOGIT_FORMAT_WARN(fmt, ...) do { } while (0) +#define LOGIT_PRINT_WARN(...) do { } while (0) +#define LOGIT_PRINTF_WARN(fmt, ...) do { } while (0) #define LOGIT_WARN_TO(index, ...) do { } while (0) #define LOGIT_WARN0_TO(index) do { } while (0) +#define LOGIT_0WARN_TO(index) do { } while (0) +#define LOGIT_0_WARN_TO(index) do { } while (0) +#define LOGIT_NOARGS_WARN_TO(index) do { } while (0) +#define LOGIT_FORMAT_WARN_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_WARN_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_WARN_TO(index, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR @@ -370,8 +418,20 @@ #else #define LOGIT_ERROR(...) do { } while (0) #define LOGIT_ERROR0() do { } while (0) +#define LOGIT_0ERROR() do { } while (0) +#define LOGIT_0_ERROR() do { } while (0) +#define LOGIT_NOARGS_ERROR() do { } while (0) +#define LOGIT_FORMAT_ERROR(fmt, ...) do { } while (0) +#define LOGIT_PRINT_ERROR(...) do { } while (0) +#define LOGIT_PRINTF_ERROR(fmt, ...) do { } while (0) #define LOGIT_ERROR_TO(index, ...) do { } while (0) #define LOGIT_ERROR0_TO(index) do { } while (0) +#define LOGIT_0ERROR_TO(index) do { } while (0) +#define LOGIT_0_ERROR_TO(index) do { } while (0) +#define LOGIT_NOARGS_ERROR_TO(index) do { } while (0) +#define LOGIT_FORMAT_ERROR_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_ERROR_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_ERROR_TO(index, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL @@ -397,8 +457,20 @@ #else #define LOGIT_FATAL(...) do { } while (0) #define LOGIT_FATAL0() do { } while (0) +#define LOGIT_0FATAL() do { } while (0) +#define LOGIT_0_FATAL() do { } while (0) +#define LOGIT_NOARGS_FATAL() do { } while (0) +#define LOGIT_FORMAT_FATAL(fmt, ...) do { } while (0) +#define LOGIT_PRINT_FATAL(...) do { } while (0) +#define LOGIT_PRINTF_FATAL(fmt, ...) do { } while (0) #define LOGIT_FATAL_TO(index, ...) do { } while (0) #define LOGIT_FATAL0_TO(index) do { } while (0) +#define LOGIT_0FATAL_TO(index) do { } while (0) +#define LOGIT_0_FATAL_TO(index) do { } while (0) +#define LOGIT_NOARGS_FATAL_TO(index) do { } while (0) +#define LOGIT_FORMAT_FATAL_TO(index, fmt, ...) do { } while (0) +#define LOGIT_PRINT_FATAL_TO(index, ...) do { } while (0) +#define LOGIT_PRINTF_FATAL_TO(index, fmt, ...) do { } while (0) #endif //------------------------------------------------------------------------------ @@ -421,6 +493,12 @@ #else #define LOGIT_TRACE_IF(condition, ...) do { } while (0) #define LOGIT_TRACE0_IF(condition) do { } while (0) +#define LOGIT_0TRACE_IF(condition) do { } while (0) +#define LOGIT_0_TRACE_IF(condition) do { } while (0) +#define LOGIT_NOARGS_TRACE_IF(condition) do { } while (0) +#define LOGIT_FORMAT_TRACE_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_TRACE_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_TRACE_IF(condition, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_INFO @@ -436,6 +514,12 @@ #else #define LOGIT_INFO_IF(condition, ...) do { } while (0) #define LOGIT_INFO0_IF(condition) do { } while (0) +#define LOGIT_0INFO_IF(condition) do { } while (0) +#define LOGIT_0_INFO_IF(condition) do { } while (0) +#define LOGIT_NOARGS_INFO_IF(condition) do { } while (0) +#define LOGIT_FORMAT_INFO_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_INFO_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_INFO_IF(condition, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_DEBUG @@ -451,6 +535,12 @@ #else #define LOGIT_DEBUG_IF(condition, ...) do { } while (0) #define LOGIT_DEBUG0_IF(condition) do { } while (0) +#define LOGIT_0DEBUG_IF(condition) do { } while (0) +#define LOGIT_0_DEBUG_IF(condition) do { } while (0) +#define LOGIT_NOARGS_DEBUG_IF(condition) do { } while (0) +#define LOGIT_FORMAT_DEBUG_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_DEBUG_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_DEBUG_IF(condition, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_WARN @@ -466,6 +556,12 @@ #else #define LOGIT_WARN_IF(condition, ...) do { } while (0) #define LOGIT_WARN0_IF(condition) do { } while (0) +#define LOGIT_0WARN_IF(condition) do { } while (0) +#define LOGIT_0_WARN_IF(condition) do { } while (0) +#define LOGIT_NOARGS_WARN_IF(condition) do { } while (0) +#define LOGIT_FORMAT_WARN_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_WARN_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_WARN_IF(condition, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_ERROR @@ -481,6 +577,12 @@ #else #define LOGIT_ERROR_IF(condition, ...) do { } while (0) #define LOGIT_ERROR0_IF(condition) do { } while (0) +#define LOGIT_0ERROR_IF(condition) do { } while (0) +#define LOGIT_0_ERROR_IF(condition) do { } while (0) +#define LOGIT_NOARGS_ERROR_IF(condition) do { } while (0) +#define LOGIT_FORMAT_ERROR_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_ERROR_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_ERROR_IF(condition, fmt, ...) do { } while (0) #endif #if LOGIT_COMPILED_LEVEL <= LOGIT_LEVEL_FATAL @@ -496,6 +598,12 @@ #else #define LOGIT_FATAL_IF(condition, ...) do { } while (0) #define LOGIT_FATAL0_IF(condition) do { } while (0) +#define LOGIT_0FATAL_IF(condition) do { } while (0) +#define LOGIT_0_FATAL_IF(condition) do { } while (0) +#define LOGIT_NOARGS_FATAL_IF(condition) do { } while (0) +#define LOGIT_FORMAT_FATAL_IF(condition, fmt, ...) do { } while (0) +#define LOGIT_PRINT_FATAL_IF(condition, fmt) do { } while (0) +#define LOGIT_PRINTF_FATAL_IF(condition, fmt, ...) do { } while (0) #endif //------------------------------------------------------------------------------