From 7e0366f635b8560116530a148f524dfe2bc0d15d Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Fri, 29 Nov 2024 01:06:58 +0100 Subject: [PATCH] Cleanup logger --- openVulkanoCpp/Base/Logger.cpp | 78 ++++++++++++++++++---------------- openVulkanoCpp/Base/Logger.hpp | 12 +----- 2 files changed, 42 insertions(+), 48 deletions(-) diff --git a/openVulkanoCpp/Base/Logger.cpp b/openVulkanoCpp/Base/Logger.cpp index 208d3f7..45fb314 100644 --- a/openVulkanoCpp/Base/Logger.cpp +++ b/openVulkanoCpp/Base/Logger.cpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #ifndef NO_CONSOLE_LOG #include #endif @@ -25,12 +27,33 @@ # include #endif - namespace OpenVulkano { + namespace + { + constexpr size_t MAX_LOG_FILE_SIZE = 512_MiB; + constexpr size_t MAX_LOG_FILE_COUNT = 3; - constexpr size_t MAX_LOG_FILE_SIZE = 512_MiB; - constexpr size_t MAX_LOG_FILE_COUNT = 3; + class CustomThreadNameFormatterFlag : public spdlog::custom_flag_formatter + { + public: + void format(const spdlog::details::log_msg &msg, const std::tm &tmTime, spdlog::memory_buf_t &dest) override + { + std::string threadName = OpenVulkano::Utils::GetThreadName(); + if(threadName.empty()) + { + uint64_t threadId = OpenVulkano::Utils::GetThreadId(); + threadName = fmt::format("{}", threadId); + } + dest.append(threadName.c_str(), threadName.c_str() + threadName.length()); + } + + std::unique_ptr clone() const override + { + return spdlog::details::make_unique(); + } + }; + } std::vector Logger::SINKS; std::vector> Logger::LOGGERS; @@ -49,14 +72,14 @@ namespace OpenVulkano namespace { - bool didLoggerShutdown = false; + bool DidLoggerShutdown = false; - void signalHandler(int sigCode) + void SignalHandler(int sigCode) { - if(!didLoggerShutdown) + if(!DidLoggerShutdown) spdlog::error("Received signal {}", sigCode); spdlog::shutdown(); - didLoggerShutdown = true; + DidLoggerShutdown = true; std::raise(sigCode); // calls default handler } @@ -72,21 +95,21 @@ namespace OpenVulkano } #endif - void setupSignalHandlers() + void SetupSignalHandlers() { - std::signal(SIGSEGV, signalHandler); - std::signal(SIGABRT, signalHandler); - std::signal(SIGFPE, signalHandler); - std::signal(SIGILL, signalHandler); - // std::signal(SIGINT, signalHandler); - std::signal(SIGTERM, signalHandler); + std::signal(SIGSEGV, SignalHandler); + std::signal(SIGABRT, SignalHandler); + std::signal(SIGFPE, SignalHandler); + std::signal(SIGILL, SignalHandler); + // std::signal(SIGINT, SignalHandler); + std::signal(SIGTERM, SignalHandler); #ifdef _WIN32 SetUnhandledExceptionFilter(win32ExceptionHandler); #endif } } - void Logger::SetupLogger(std::string logFolder, const std::string& logFile) + void Logger::SetupLogger(std::string logFolder, const std::string& logFile, bool handleSignals) { if (logFolder.empty()) logFolder = (AppFolders::GetAppDataHomeDir() / "logs").string(); if (!SINKS.empty()) return; @@ -122,9 +145,11 @@ namespace OpenVulkano PERF = CreateLogger("perf"); APP = CreateLogger("app"); + spdlog::set_default_logger(APP); spdlog::flush_every(std::chrono::seconds(5)); - setupSignalHandlers(); + if (handleSignals) + SetupSignalHandlers(); MANAGER->info("Logger initialized"); } @@ -181,25 +206,4 @@ namespace OpenVulkano } SINKS.push_back(newSink); } - - void CustomThreadNameFormatterFlag::format(const spdlog::details::log_msg &msg, const std::tm &tmTime, spdlog::memory_buf_t &dest) - { - std::string threadName = OpenVulkano::Utils::GetThreadName(); - if(threadName.length()) - { - dest.append(threadName.c_str(), threadName.c_str() + threadName.length()); - } - else - { - uint64_t threadId = OpenVulkano::Utils::GetThreadId(); - char buffer[64]; - snprintf(buffer, sizeof(buffer), "%" PRIu64, threadId); - dest.append(buffer, buffer + strlen(buffer)); - } - } - - std::unique_ptr CustomThreadNameFormatterFlag::clone() const - { - return spdlog::details::make_unique(); - } } diff --git a/openVulkanoCpp/Base/Logger.hpp b/openVulkanoCpp/Base/Logger.hpp index ef3b502..2490e20 100644 --- a/openVulkanoCpp/Base/Logger.hpp +++ b/openVulkanoCpp/Base/Logger.hpp @@ -10,8 +10,6 @@ #define SPDLOG_TRACE_ON #include -#include -#include namespace OpenVulkano { @@ -36,7 +34,7 @@ namespace OpenVulkano static Ptr PERF; static Ptr APP; - static void SetupLogger(std::string logFolder = "", const std::string& logFile = "openVulkano.log"); + static void SetupLogger(std::string logFolder = "", const std::string& logFile = "openVulkano.log", bool handleSignals = false); /** * \brief Creates a new custom logger that writes to the main log file. @@ -50,12 +48,4 @@ namespace OpenVulkano static void RegisterSink(const spdlog::sink_ptr& newSink); }; - - class CustomThreadNameFormatterFlag : public spdlog::custom_flag_formatter - { - public: - void format(const spdlog::details::log_msg &msg, const std::tm &tmTime, spdlog::memory_buf_t &dest) override; - std::unique_ptr clone() const override; - }; - } \ No newline at end of file