diff --git a/Source/UniversalLogging/Private/LogFileManager.cpp b/Source/UniversalLogging/Private/LogFileManager.cpp index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d5f085bc8fcf81db5868e466bc389a33196fe4f4 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d339d83b1343de28f0589a7c10a265d5ac53853f 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 a7cfe0e7b459694dd20900203117a57b5ddd91a3..fd9d6a788c80fb571dd6f70f685936c910193a5c 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 873db432284858c6eb9cfa1537551f747cc2cc7c..b31f1af4185b5f7a03525f5011d50d661556a276 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 209e2a2bf4cd1c243b451f36ceb72b52e04013bf..e8e1f19ec23fe885107aedcd4b3498cca7ac38f2 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;