Cleanup logger

This commit is contained in:
Georg Hagen
2024-11-29 01:06:58 +01:00
parent f457020f5e
commit 7e0366f635
2 changed files with 42 additions and 48 deletions

View File

@@ -14,6 +14,8 @@
#include <inttypes.h> #include <inttypes.h>
#include <spdlog/sinks/rotating_file_sink.h> #include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/null_sink.h> #include <spdlog/sinks/null_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/pattern_formatter.h>
#ifndef NO_CONSOLE_LOG #ifndef NO_CONSOLE_LOG
#include <spdlog/sinks/stdout_color_sinks.h> #include <spdlog/sinks/stdout_color_sinks.h>
#endif #endif
@@ -25,12 +27,33 @@
# include <dbghelp.h> # include <dbghelp.h>
#endif #endif
namespace OpenVulkano 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; class CustomThreadNameFormatterFlag : public spdlog::custom_flag_formatter
constexpr size_t MAX_LOG_FILE_COUNT = 3; {
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<spdlog::custom_flag_formatter> clone() const override
{
return spdlog::details::make_unique<CustomThreadNameFormatterFlag>();
}
};
}
std::vector<spdlog::sink_ptr> Logger::SINKS; std::vector<spdlog::sink_ptr> Logger::SINKS;
std::vector<std::weak_ptr<spdlog::logger>> Logger::LOGGERS; std::vector<std::weak_ptr<spdlog::logger>> Logger::LOGGERS;
@@ -49,14 +72,14 @@ namespace OpenVulkano
namespace 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::error("Received signal {}", sigCode);
spdlog::shutdown(); spdlog::shutdown();
didLoggerShutdown = true; DidLoggerShutdown = true;
std::raise(sigCode); // calls default handler std::raise(sigCode); // calls default handler
} }
@@ -72,21 +95,21 @@ namespace OpenVulkano
} }
#endif #endif
void setupSignalHandlers() void SetupSignalHandlers()
{ {
std::signal(SIGSEGV, signalHandler); std::signal(SIGSEGV, SignalHandler);
std::signal(SIGABRT, signalHandler); std::signal(SIGABRT, SignalHandler);
std::signal(SIGFPE, signalHandler); std::signal(SIGFPE, SignalHandler);
std::signal(SIGILL, signalHandler); std::signal(SIGILL, SignalHandler);
// std::signal(SIGINT, signalHandler); // std::signal(SIGINT, SignalHandler);
std::signal(SIGTERM, signalHandler); std::signal(SIGTERM, SignalHandler);
#ifdef _WIN32 #ifdef _WIN32
SetUnhandledExceptionFilter(win32ExceptionHandler); SetUnhandledExceptionFilter(win32ExceptionHandler);
#endif #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 (logFolder.empty()) logFolder = (AppFolders::GetAppDataHomeDir() / "logs").string();
if (!SINKS.empty()) return; if (!SINKS.empty()) return;
@@ -122,9 +145,11 @@ namespace OpenVulkano
PERF = CreateLogger("perf"); PERF = CreateLogger("perf");
APP = CreateLogger("app"); APP = CreateLogger("app");
spdlog::set_default_logger(APP);
spdlog::flush_every(std::chrono::seconds(5)); spdlog::flush_every(std::chrono::seconds(5));
setupSignalHandlers(); if (handleSignals)
SetupSignalHandlers();
MANAGER->info("Logger initialized"); MANAGER->info("Logger initialized");
} }
@@ -181,25 +206,4 @@ namespace OpenVulkano
} }
SINKS.push_back(newSink); 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<spdlog::custom_flag_formatter> CustomThreadNameFormatterFlag::clone() const
{
return spdlog::details::make_unique<CustomThreadNameFormatterFlag>();
}
} }

View File

@@ -10,8 +10,6 @@
#define SPDLOG_TRACE_ON #define SPDLOG_TRACE_ON
#include <spdlog/spdlog.h> #include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/pattern_formatter.h>
namespace OpenVulkano namespace OpenVulkano
{ {
@@ -36,7 +34,7 @@ namespace OpenVulkano
static Ptr PERF; static Ptr PERF;
static Ptr APP; 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. * \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); 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<spdlog::custom_flag_formatter> clone() const override;
};
} }