eray_ozr
(eray_ozr)
December 10, 2025, 4:58pm
1
I developed a runtime log catching and visualizing system by using FOutputDevice. You can access it from here. It captures all UE_LOG(LogTemp) and PrintString() messages automatically.
UE5 runtime logger plugin for shipping builds without third party dependency.
The problem is, If I enable CanBeUsedOnMultipleThreads() by overriding it like this
bool FRuntimeLoggerOutput::CanBeUsedOnMultipleThreads() const
{
return true;
}
void FRuntimeLoggerOutput::InitSubsystem(URuntimeLoggerSubsystem* In_LoggerSubsystem)
{
this->LoggerSubsystem = In_LoggerSubsystem;
}
bool FRuntimeLoggerOutput::CanBeUsedOnAnyThread() const
{
return true;
}
bool FRuntimeLoggerOutput::CanBeUsedOnMultipleThreads() const
{
return true;
}
bool FRuntimeLoggerOutput::CanBeUsedOnPanicThread() const
{
return true;
}
void FRuntimeLoggerOutput::Serialize(const TCHAR* Message, ELogVerbosity::Type Verbosity, const FName& Category)
const TCHAR* Message comes empty
bool FRuntimeLoggerOutput::CanBeUsedOnMultipleThreads() const
{
return true;
}
bool FRuntimeLoggerOutput::CanBeUsedOnPanicThread() const
{
return true;
}
void FRuntimeLoggerOutput::Serialize(const TCHAR* Message, ELogVerbosity::Type Verbosity, const FName& Category)
{
if (Category != FName(TEXT("LogTemp")))
{
return;
}
const FString FunctionName = FString::Printf(TEXT("%s::%s"), TEXT("RuntimeLogger"), ANSI_TO_TCHAR(__FUNCTION__));
AsyncTask(ENamedThreads::GameThread, [this, Message, Verbosity, FunctionName]()
{