aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/logging/logging.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenutil/logging/logging.cpp')
-rw-r--r--src/zenutil/logging/logging.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/zenutil/logging/logging.cpp b/src/zenutil/logging/logging.cpp
index ea2448a42..aa34fc50c 100644
--- a/src/zenutil/logging/logging.cpp
+++ b/src/zenutil/logging/logging.cpp
@@ -8,6 +8,7 @@
#include <zencore/logging.h>
#include <zencore/logging/ansicolorsink.h>
#include <zencore/logging/asyncsink.h>
+#include <zencore/logging/broadcastsink.h>
#include <zencore/logging/logger.h>
#include <zencore/logging/msvcsink.h>
#include <zencore/logging/registry.h>
@@ -23,8 +24,9 @@
namespace zen {
-static bool g_IsLoggingInitialized;
-logging::SinkPtr g_FileSink;
+static bool g_IsLoggingInitialized;
+logging::SinkPtr g_FileSink;
+Ref<logging::BroadcastSink> g_BroadcastSink;
logging::SinkPtr
GetFileSink()
@@ -32,6 +34,12 @@ GetFileSink()
return g_FileSink;
}
+Ref<logging::BroadcastSink>
+GetDefaultBroadcastSink()
+{
+ return g_BroadcastSink;
+}
+
void
InitializeLogging(const LoggingOptions& LogOptions)
{
@@ -47,7 +55,6 @@ BeginInitializeLogging(const LoggingOptions& LogOptions)
ZEN_MEMSCOPE(ELLMTag::Logging);
zen::logging::InitializeLogging();
- zen::logging::EnableVTMode();
// Sinks
@@ -117,8 +124,10 @@ BeginInitializeLogging(const LoggingOptions& LogOptions)
LoggerRef DefaultLogger = zen::logging::Default();
- // Collect sinks into a local vector first so we can optionally wrap them
- std::vector<logging::SinkPtr> Sinks;
+ // Build the broadcast sink — a shared indirection point that all
+ // loggers cloned from the default will share. Adding or removing
+ // a child sink later is immediately visible to every logger.
+ std::vector<logging::SinkPtr> BroadcastChildren;
if (LogOptions.NoConsoleOutput)
{
@@ -126,17 +135,18 @@ BeginInitializeLogging(const LoggingOptions& LogOptions)
}
else
{
- logging::SinkPtr ConsoleSink(new logging::AnsiColorStdoutSink());
+ logging::SinkPtr ConsoleSink(
+ new logging::AnsiColorStdoutSink(LogOptions.ForceColor ? logging::ColorMode::On : logging::ColorMode::Auto));
if (LogOptions.QuietConsole)
{
ConsoleSink->SetLevel(logging::Warn);
}
- Sinks.push_back(ConsoleSink);
+ BroadcastChildren.push_back(ConsoleSink);
}
if (FileSink)
{
- Sinks.push_back(FileSink);
+ BroadcastChildren.push_back(FileSink);
}
#if ZEN_PLATFORM_WINDOWS
@@ -144,21 +154,21 @@ BeginInitializeLogging(const LoggingOptions& LogOptions)
{
logging::SinkPtr DebugSink(new logging::MsvcSink());
DebugSink->SetLevel(logging::Debug);
- Sinks.push_back(DebugSink);
+ BroadcastChildren.push_back(DebugSink);
}
#endif
+ g_BroadcastSink = Ref<logging::BroadcastSink>(new logging::BroadcastSink(std::move(BroadcastChildren)));
+
bool IsAsync = LogOptions.AllowAsync && !LogOptions.IsDebug && !LogOptions.IsTest;
if (IsAsync)
{
- std::vector<logging::SinkPtr> AsyncSinks;
- AsyncSinks.emplace_back(new logging::AsyncSink(std::move(Sinks)));
- DefaultLogger->SetSinks(std::move(AsyncSinks));
+ DefaultLogger->SetSink(logging::SinkPtr(new logging::AsyncSink({logging::SinkPtr(g_BroadcastSink.Get())})));
}
else
{
- DefaultLogger->SetSinks(std::move(Sinks));
+ DefaultLogger->SetSink(logging::SinkPtr(g_BroadcastSink.Get()));
}
static struct : logging::ErrorHandler
@@ -258,7 +268,8 @@ ShutdownLogging()
zen::logging::ShutdownLogging();
- g_FileSink = nullptr;
+ g_FileSink = nullptr;
+ g_BroadcastSink = nullptr;
}
} // namespace zen