Commit 9369fe8c authored by gabime's avatar gabime

Fix #1262

parent 1549ff12
......@@ -69,6 +69,11 @@ SPDLOG_INLINE bool logger::should_log(level::level_enum msg_level) const
return msg_level >= level_.load(std::memory_order_relaxed);
}
SPDLOG_INLINE bool logger::should_backtrace() const
{
return tracer_.enabled();
}
SPDLOG_INLINE void logger::set_level(level::level_enum log_level)
{
level_.store(log_level);
......
......@@ -319,8 +319,12 @@ public:
#endif // _WIN32
#endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT
// return true logging is enabled for the given level.
bool should_log(level::level_enum msg_level) const;
// return true if backtrace logging is enabled.
bool should_backtrace() const;
void set_level(level::level_enum log_level);
level::level_enum level() const;
......
......@@ -285,7 +285,10 @@ inline void critical(wstring_view_t fmt, const Args &... args)
// SPDLOG_LEVEL_OFF
//
#define SPDLOG_LOGGER_CALL(logger, level, ...) logger->log(spdlog::source_loc{__FILE__, __LINE__, SPDLOG_FUNCTION}, level, __VA_ARGS__)
#define SPDLOG_LOGGER_CALL(logger, level, ...) do {\
if(logger->should_log(level) || logger->should_backtrace()) \
logger->log(spdlog::source_loc{__FILE__, __LINE__, SPDLOG_FUNCTION}, level, __VA_ARGS__);\
} while(0)
#if SPDLOG_ACTIVE_LEVEL <= SPDLOG_LEVEL_TRACE
#define SPDLOG_LOGGER_TRACE(logger, ...) SPDLOG_LOGGER_CALL(logger, spdlog::level::trace, __VA_ARGS__)
......
......@@ -39,3 +39,13 @@ TEST_CASE("disable param evaluation", "[macros]")
{
SPDLOG_TRACE("Test message {}", throw std::runtime_error("Should not be evaluated"));
}
// ensure that even if right macro level is on- don't eavluate if the logger's level is not high enough
TEST_CASE("disable param evaluation2", "[macros]")
{
auto logger = std::make_shared<spdlog::logger>("test-macro");
logger->set_level(spdlog::level::off);
int x = 0;
SPDLOG_LOGGER_DEBUG(logger, "Test message {}", ++x);
REQUIRE(x == 0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment