From f16757baafe81e5cadbb8e5525a9f167594ac839 Mon Sep 17 00:00:00 2001 From: Valentin Tolmer Date: Sat, 6 May 2023 14:29:20 +0200 Subject: [PATCH] core: Make sure to initialize the default logger The default logger is never initialized, even if there is a default logger factory. As a result, the basic logger example segfaults when run. Note that by default, the default logger also doesn't have a sink, so we have to set one up in the example to get any output. --- examples/BasicLogger.cpp | 3 +++ src/LoggerRegistry.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/examples/BasicLogger.cpp b/examples/BasicLogger.cpp index ad6d5ec..4e407c0 100644 --- a/examples/BasicLogger.cpp +++ b/examples/BasicLogger.cpp @@ -50,6 +50,9 @@ int main(int argc, const char* argv[]) { // Set the global logger level to Debug logpp::setLevel(logpp::LogLevel::Debug); + auto formatter = std::make_shared(); + auto consoleOut = std::make_shared(formatter); + logpp::defaultLogger()->setSink(consoleOut); // Uncomment this line to log lines in logfmt format // logpp::setFormatter(); diff --git a/src/LoggerRegistry.cpp b/src/LoggerRegistry.cpp index 21f247a..23d2b20 100644 --- a/src/LoggerRegistry.cpp +++ b/src/LoggerRegistry.cpp @@ -127,6 +127,9 @@ namespace logpp std::shared_ptr LoggerRegistry::defaultLogger() { std::lock_guard guard(m_mutex); + if (m_defaultLogger == nullptr) { + m_defaultLogger = m_defaultLoggerFactory("logpp"); + } return m_defaultLogger; }