From 2fc15e320c934424bc03601551f34f26a38e40a3 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Wed, 15 Sep 2021 16:17:22 +0200 Subject: Tweaked logging to streamline access, and simplified setup code for new loggers --- zencore/include/zencore/logging.h | 10 +++++++++- zencore/logging.cpp | 24 +++++++++++++----------- zenserver/diag/logging.cpp | 15 +++++++++------ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/zencore/include/zencore/logging.h b/zencore/include/zencore/logging.h index 4996463fd..4eee20414 100644 --- a/zencore/include/zencore/logging.h +++ b/zencore/include/zencore/logging.h @@ -13,6 +13,7 @@ namespace zen::logging { spdlog::logger& Default(); +void SetDefault(std::shared_ptr NewDefaultLogger); spdlog::logger& ConsoleLog(); spdlog::logger& Get(std::string_view Name); @@ -22,7 +23,14 @@ void ShutdownLogging(); } // namespace zen::logging namespace zen { -spdlog::logger& Log(); +extern spdlog::logger* TheDefaultLogger; + +inline spdlog::logger& +Log() +{ + return *TheDefaultLogger; +} + using logging::ConsoleLog; } // namespace zen diff --git a/zencore/logging.cpp b/zencore/logging.cpp index 00ec845b4..c5c0b6446 100644 --- a/zencore/logging.cpp +++ b/zencore/logging.cpp @@ -6,11 +6,8 @@ namespace zen { -spdlog::logger& -Log() -{ - return *spdlog::default_logger_raw(); -} +// We shadow the underlying spdlog default logger, in order to avoid a bunch of overhead +spdlog::logger* TheDefaultLogger; } // namespace zen @@ -19,20 +16,24 @@ namespace zen::logging { spdlog::logger& Default() { - return *spdlog::default_logger_raw(); + return *TheDefaultLogger; +} + +void +SetDefault(std::shared_ptr NewDefaultLogger) +{ + spdlog::set_default_logger(NewDefaultLogger); + TheDefaultLogger = spdlog::default_logger_raw(); } spdlog::logger& Get(std::string_view Name) { std::shared_ptr Logger = spdlog::get(std::string(Name)); + if (!Logger) { - Logger = std::make_shared(std::string(Name), - begin(spdlog::default_logger()->sinks()), - end(spdlog::default_logger()->sinks())); - - Logger->set_level(spdlog::default_logger()->level()); + Logger = Default().clone(std::string(Name)); spdlog::register_logger(Logger); } @@ -57,6 +58,7 @@ ConsoleLog() void InitializeLogging() { + TheDefaultLogger = spdlog::default_logger_raw(); } void diff --git a/zenserver/diag/logging.cpp b/zenserver/diag/logging.cpp index 5782ce582..48eda7512 100644 --- a/zenserver/diag/logging.cpp +++ b/zenserver/diag/logging.cpp @@ -211,7 +211,7 @@ InitializeLogging(const ZenServerOptions& GlobalOptions) spdlog::init_thread_pool(QueueSize, ThreadCount); auto AsyncLogger = spdlog::create_async("main"); - spdlog::set_default_logger(AsyncLogger); + zen::logging::SetDefault(AsyncLogger); } // Sinks @@ -220,16 +220,16 @@ InitializeLogging(const ZenServerOptions& GlobalOptions) auto FileSink = std::make_shared(zen::WideToUtf8(LogPath.c_str()), /* truncate */ true); // Default - auto DefaultLogger = spdlog::default_logger(); - auto& Sinks = spdlog::default_logger()->sinks(); - Sinks.clear(); + auto& DefaultLogger = zen::logging::Default(); + auto& Sinks = DefaultLogger.sinks(); + + Sinks.clear(); Sinks.push_back(ConsoleSink); Sinks.push_back(FileSink); - DefaultLogger->set_level(LogLevel); - DefaultLogger->flush_on(spdlog::level::err); // Jupiter - only log HTTP traffic to file + auto JupiterLogger = std::make_shared("jupiter", FileSink); spdlog::register_logger(JupiterLogger); JupiterLogger->set_level(LogLevel); @@ -238,7 +238,10 @@ InitializeLogging(const ZenServerOptions& GlobalOptions) spdlog::register_logger(ZenClientLogger); ZenClientLogger->set_level(LogLevel); + // Configure all registered loggers according to settings + spdlog::set_level(LogLevel); + spdlog::flush_on(spdlog::level::err); spdlog::set_formatter(std::make_unique(GlobalOptions.LogId, std::chrono::system_clock::now())); } -- cgit v1.2.3