Cleanup logger
This commit is contained in:
@@ -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,12 +27,33 @@
|
||||
# include <dbghelp.h>
|
||||
#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<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;
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user