From 7c369b5b135fc53ef30f184a687988c703630394 Mon Sep 17 00:00:00 2001 From: mbellgardt <bellgardt@vr.rwth-aachen.de> Date: Tue, 26 Jan 2021 11:50:53 +0100 Subject: [PATCH] Finish implementation of LogFileManager. Multiple streams can now point to the same file. --- .../Private/LogFileManager.cpp | 19 +++++++++++++++++++ .../UniversalLogging/Private/LogFileManager.h | 17 +++++++++++++++++ Source/UniversalLogging/Private/LogStream.cpp | 2 +- .../Private/UniversalLogging.cpp | 7 +++++++ .../Private/UniversalLogging.h | 4 ++++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Source/UniversalLogging/Private/LogFileManager.cpp b/Source/UniversalLogging/Private/LogFileManager.cpp index e69de29..d5f085b 100644 --- a/Source/UniversalLogging/Private/LogFileManager.cpp +++ b/Source/UniversalLogging/Private/LogFileManager.cpp @@ -0,0 +1,19 @@ +#include "LogFileManager.h" + +LogFileStream* LogFileManager::GetLogFileStream(FString FilePath, FString FileName) +{ + FString Full_Path = FPaths::Combine(FilePath, FileName); + if (Streams.Contains(Full_Path)) + return Streams[Full_Path].Get(); + else + Streams.Add(Full_Path, MakeUnique<LogFileStream>(FilePath, FileName)); + return Streams[Full_Path].Get(); +} + +LogFileManager::LogFileManager() +{ +} + +LogFileManager::~LogFileManager() +{ +} diff --git a/Source/UniversalLogging/Private/LogFileManager.h b/Source/UniversalLogging/Private/LogFileManager.h index e69de29..d339d83 100644 --- a/Source/UniversalLogging/Private/LogFileManager.h +++ b/Source/UniversalLogging/Private/LogFileManager.h @@ -0,0 +1,17 @@ +#pragma once + +#include "LogFileStream.h" + +class LogFileManager +{ +public: + LogFileStream* GetLogFileStream(FString FilePath, FString FileName); + +private: + friend class UniversalLoggingImpl; + LogFileManager(); + virtual ~LogFileManager(); + +private: + TMap<FString, TUniquePtr<LogFileStream>> Streams; +}; \ No newline at end of file diff --git a/Source/UniversalLogging/Private/LogStream.cpp b/Source/UniversalLogging/Private/LogStream.cpp index a7cfe0e..fd9d6a7 100644 --- a/Source/UniversalLogging/Private/LogStream.cpp +++ b/Source/UniversalLogging/Private/LogStream.cpp @@ -152,7 +152,7 @@ void LogStreamImpl::Open() FString File_Path = Filepath; if(bPer_Session) File_Path = FPaths::Combine(File_Path, UniLog.GetSessionIdentifier()); - Log_File_Stream = new LogFileStream(File_Path, Filename); // this will not stay like this, as LogFileStreams will be managed by LogFileManager + Log_File_Stream = UniversalLoggingImpl::GetLogFileManager()->GetLogFileStream(File_Path, Filename); // this will not stay like this, as LogFileStreams will be managed by LogFileManager Log_File_Stream->Open(); if (!Log_File_Stream->GetIsOpen()) { diff --git a/Source/UniversalLogging/Private/UniversalLogging.cpp b/Source/UniversalLogging/Private/UniversalLogging.cpp index 873db43..b31f1af 100644 --- a/Source/UniversalLogging/Private/UniversalLogging.cpp +++ b/Source/UniversalLogging/Private/UniversalLogging.cpp @@ -7,6 +7,8 @@ #include "Cluster/IDisplayClusterClusterManager.h" #include "Misc/CommandLine.h" +LogFileManager UniversalLoggingImpl::Log_File_Manager = LogFileManager(); + void UniversalLoggingImpl::StartupModule() { Streams.Add("", MakeUnique<LogStreamImpl>()); @@ -174,4 +176,9 @@ FString UniversalLoggingImpl::GetNodeName() return FString(TEXT("Localhost")); } +LogFileManager* UniversalLoggingImpl::GetLogFileManager() +{ + return &Log_File_Manager; +} + IMPLEMENT_MODULE(UniversalLoggingImpl, UniversalLogging) diff --git a/Source/UniversalLogging/Private/UniversalLogging.h b/Source/UniversalLogging/Private/UniversalLogging.h index 209e2a2..e8e1f19 100644 --- a/Source/UniversalLogging/Private/UniversalLogging.h +++ b/Source/UniversalLogging/Private/UniversalLogging.h @@ -3,6 +3,7 @@ #include "LogStream.h" #include "OnScreenLog.h" #include "IUniversalLogging.h" +#include "LogFileManager.h" #include "Engine/World.h" @@ -32,7 +33,10 @@ public: static bool IsClusterMaster(); static FString GetNodeName(); + static LogFileManager* GetLogFileManager(); + private: + static LogFileManager Log_File_Manager; TMap<FString, TUniquePtr<LogStreamImpl>> Streams; FString Session_ID; TBaseDelegate<void, UWorld*, const UWorld::InitializationValues> On_Post_World_Initialization_Delegate; -- GitLab