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 <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/null_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/pattern_formatter.h>
#ifndef NO_CONSOLE_LOG
#include <spdlog/sinks/stdout_color_sinks.h>
#endif
@@ -25,13 +27,34 @@
# include <dbghelp.h>
#endif
namespace OpenVulkano
{
namespace
{
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<spdlog::custom_flag_formatter> clone() const override
{
return spdlog::details::make_unique<CustomThreadNameFormatterFlag>();
}
};
}
std::vector<spdlog::sink_ptr> Logger::SINKS;
std::vector<std::weak_ptr<spdlog::logger>> Logger::LOGGERS;
Logger::Ptr Logger::WINDOW = nullptr;
@@ -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<spdlog::custom_flag_formatter> CustomThreadNameFormatterFlag::clone() const
{
return spdlog::details::make_unique<CustomThreadNameFormatterFlag>();
}
}

View File

@@ -10,8 +10,6 @@
#define SPDLOG_TRACE_ON
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/pattern_formatter.h>
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<spdlog::custom_flag_formatter> clone() const override;
};
}