Files
UnrealEngineUWP/Engine/Source/Programs/PixelStreaming/SessionMonitor/src/Logging.cpp
Andriy Tylychko 9f65ad43a6 Merging //UE4/Private-3Lateral_Streaming to Main (//UE4/Main)
This mainly covers the new Pixel Streaming plugin version along with minor changes to other parts of the engine:
* removed multiple copies of FThread as it's now a part of Core
* changes to SlateUser required to fix user input in Pixel Streaming

This wasn't formally reviewed due to the size of Pixel Streaming changes, but was skimmed over by Zack Letters before integration

#rb zack.letters

[CL 9486237 by Andriy Tylychko in Main branch]
2019-10-09 08:21:27 -04:00

106 lines
2.5 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "SessionMonitorPCH.h"
#include "Logging.h"
#include "StringUtils.h"
#include "TimeUtils.h"
EG_DEFINE_LOG_CATEGORY(LogDefault)
const char* LogVerbosityToString(ELogVerbosity v)
{
switch (v)
{
case ELogVerbosity::None:
return "NNN";
case ELogVerbosity::Fatal:
return "FTL";
case ELogVerbosity::Error:
return "ERR";
case ELogVerbosity::Warning:
return "WRN";
case ELogVerbosity::Log:
return "LOG";
case ELogVerbosity::Verbose:
return "LOG";
case ELogVerbosity::VeryVerbose:
return "LOG";
};
return "Unknown";
}
FLogCategoryBase::FLogCategoryBase(const char* Name, ELogVerbosity Verbosity, ELogVerbosity CompileTimeVerbosity)
: Name(Name)
, Verbosity(Verbosity)
, CompileTimeVerbosity(CompileTimeVerbosity)
{
}
bool FLogCategoryBase::IsSuppressed(ELogVerbosity V) const
{
return V > this->Verbosity;
}
void FLogCategoryBase::SetVerbosity(ELogVerbosity V)
{
Verbosity = ELogVerbosity(std::min((int)CompileTimeVerbosity, (int)V));
}
//////////////////////////////////////////////////////////////////////////
// ILogOutput
//////////////////////////////////////////////////////////////////////////
ILogOutput::ILogOutput()
{
FSharedData* Data = GetSharedData();
auto Lk = std::unique_lock<std::mutex>(Data->Mtx);
Data->Outputs.push_back(this);
}
ILogOutput::~ILogOutput()
{
FSharedData* Data = GetSharedData();
auto Lk = std::unique_lock<std::mutex>(Data->Mtx);
Data->Outputs.erase(std::find(Data->Outputs.begin(), Data->Outputs.end(), this));
}
ILogOutput::FSharedData* ILogOutput::GetSharedData()
{
// This is thread safe (aka: Magic statics in C++11)
static FSharedData Data;
return &Data;
}
void ILogOutput::LogToAll(
const char* File, int Line, const FLogCategoryBase* Category, ELogVerbosity Verbosity,
_Printf_format_string_ const char* Fmt, ...)
{
va_list Args;
va_start(Args, Fmt);
const char* Prefix = "";
{
FDateTime DateTime = PARAM_LocalTime ? Now() : UtcNow();
Prefix = FormatString(
"[%s]: %s: %-11s: ",
DateTime.ToString(),
LogVerbosityToString(Verbosity),
Category->Name.c_str());
}
char* Msg = FormatStringVA(Fmt, Args);
constexpr int BufSize = 1024*10;
char Buf[BufSize];
SNPrintf(Buf, BufSize, "%s%s\n", Prefix, Msg);
OutputDebugStringA(Buf);
FSharedData* Data = GetSharedData();
auto Lk = std::unique_lock<std::mutex>(Data->Mtx);
for (ILogOutput* Out : Data->Outputs)
{
Out->Log(File, Line, Category, Verbosity, Buf);
}
}