From 4bf300fd47de08ea5c55b50826af95befc021256 Mon Sep 17 00:00:00 2001 From: Rainer Kuemmerle Date: Sat, 11 Nov 2023 18:54:20 +0100 Subject: [PATCH] Fix logger singleton Fix #732 --- g2o/stuff/logger.cpp | 14 ++++++++++++-- g2o/stuff/logger.h | 17 +++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/g2o/stuff/logger.cpp b/g2o/stuff/logger.cpp index 5b5044ea9..4e67c60ff 100644 --- a/g2o/stuff/logger.cpp +++ b/g2o/stuff/logger.cpp @@ -26,6 +26,10 @@ #include "logger.h" +#include + +#include + #include "g2o/config.h" #ifdef G2O_HAVE_LOGGING @@ -37,13 +41,17 @@ namespace g2o::internal { +constexpr std::string_view kLoggerName = "g2o"; + LoggerInterface::LoggerInterface() { spdlog::cfg::load_env_levels(); - console_ = spdlog::stdout_color_mt("g2o"); + console_ = spdlog::get(std::string(kLoggerName)); + if (console_) return; + console_ = spdlog::stdout_color_mt(std::string(kLoggerName)); console_->set_pattern("%+"); } -LoggerInterface::~LoggerInterface() { spdlog::drop("g2o"); } +LoggerInterface::~LoggerInterface() { spdlog::drop(std::string(kLoggerName)); } } // namespace g2o::internal #endif @@ -54,6 +62,8 @@ void setLevel(Level level) { #ifdef G2O_HAVE_LOGGING auto toSpdLogLevel = [](Level level) { switch (level) { + case Level::kTrace: + return spdlog::level::trace; case Level::kDebug: return spdlog::level::debug; case Level::kInfo: diff --git a/g2o/stuff/logger.h b/g2o/stuff/logger.h index 071519795..f3129e5ff 100644 --- a/g2o/stuff/logger.h +++ b/g2o/stuff/logger.h @@ -79,6 +79,10 @@ using Logger = internal::Singleton; } // namespace g2o // TODO(Rainer): Switch to std::source_location with c++20 +#define G2O_TRACE(...) \ + g2o::Logger::get().console().log( \ + spdlog::source_loc(__FILE__, __LINE__, __FUNCTION__), \ + spdlog::level::trace, __VA_ARGS__) #define G2O_DEBUG(...) \ g2o::Logger::get().console().log( \ spdlog::source_loc(__FILE__, __LINE__, __FUNCTION__), \ @@ -102,16 +106,17 @@ using Logger = internal::Singleton; #else -#define G2O_DEBUG(...) -#define G2O_INFO(...) -#define G2O_WARN(...) -#define G2O_ERROR(...) -#define G2O_CRITICAL(...) +#define G2O_TRACE(...) (void)0 +#define G2O_DEBUG(...) (void)0 +#define G2O_INFO(...) (void)0 +#define G2O_WARN(...) (void)0 +#define G2O_ERROR(...) (void)0 +#define G2O_CRITICAL(...) (void)0 #endif // G2O_HAVE_LOGGING namespace g2o::logging { -enum class Level { kDebug, kInfo, kWarn, kError, kOff }; +enum class Level { kTrace, kDebug, kInfo, kWarn, kError, kOff }; /** * @brief Set the Log Level *