Cleanup logger
This commit is contained in:
@@ -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>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user