Files
UnrealEngine/Engine/Plugins/Media/PixelStreaming2/Source/PixelStreaming2RTC/Internal/EpicRtcLogging.h
2025-05-18 13:04:45 +08:00

89 lines
3.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Delegates/IDelegateInstance.h"
#include "Internationalization/Regex.h"
#include "Logging/LogMacros.h"
#include "epic_rtc/common/logging.h"
PIXELSTREAMING2RTC_API DECLARE_LOG_CATEGORY_EXTERN(LogPixelStreaming2EpicRtc, Log, All);
PIXELSTREAMING2RTC_API DECLARE_LOG_CATEGORY_EXTERN(LogPixelStreaming2WebRtc, Fatal, All);
namespace UE::PixelStreaming2
{
constexpr EpicRtcLogLevel UnrealLogToEpicRtcCategoryMap[] = {
EpicRtcLogLevel::Off,
EpicRtcLogLevel::Critical,
EpicRtcLogLevel::Error,
EpicRtcLogLevel::Warning,
EpicRtcLogLevel::Info,
EpicRtcLogLevel::Info,
EpicRtcLogLevel::Debug,
EpicRtcLogLevel::Trace,
EpicRtcLogLevel::Trace
};
static_assert(EpicRtcLogLevel::Off == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::NoLogging]);
static_assert(EpicRtcLogLevel::Critical == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Fatal]);
static_assert(EpicRtcLogLevel::Error == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Error]);
static_assert(EpicRtcLogLevel::Warning == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Warning]);
static_assert(EpicRtcLogLevel::Info == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Display]);
static_assert(EpicRtcLogLevel::Info == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Log]);
static_assert(EpicRtcLogLevel::Debug == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::Verbose]);
static_assert(EpicRtcLogLevel::Trace == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::VeryVerbose]);
static_assert(EpicRtcLogLevel::Trace == UnrealLogToEpicRtcCategoryMap[ELogVerbosity::Type::All]);
/**
* An interface providing functionality for manipulating EpicRtc logs.
*
* This includes completely removing log messages by checking IsFiltered()
* or by redacting sensitive information using Censor()
*/
class PIXELSTREAMING2RTC_API ILogManipulator
{
public:
virtual ~ILogManipulator() = default;
/**
* Checks if a log message should or shouldn't be logged.
*
* @return true is the log message is filtered and shouldn't be displayed
*/
virtual bool IsFiltered(ELogVerbosity::Type LogVerbosity, const FString& LogString) = 0;
virtual FString Censor(ELogVerbosity::Type LogVerbosity, const FString& LogString) = 0;
};
class PIXELSTREAMING2RTC_API FEpicRtcLogFilter : public ILogManipulator
{
public:
FEpicRtcLogFilter();
~FEpicRtcLogFilter();
virtual bool IsFiltered(ELogVerbosity::Type LogVerbosity, const FString& LogString) override;
virtual FString Censor(ELogVerbosity::Type LogVerbosity, const FString& LogString) override { return LogString; }
private:
void OnEpicRtcLogFilterChanged(IConsoleVariable* Var);
void ParseFilterString(const FString& LogFilterString);
private:
TArray<FRegexPattern> RegexPatterns;
FDelegateHandle EpicRtcLogFilterChangedHandle;
};
class PIXELSTREAMING2RTC_API FEpicRtcLogsRedirector : public EpicRtcLoggerInterface
{
public:
FEpicRtcLogsRedirector(TSharedPtr<ILogManipulator> LogManipulator = nullptr);
virtual void Log(const EpicRtcLogMessage& Message) override;
private:
TSharedPtr<ILogManipulator> LogManipulator;
};
} // namespace UE::PixelStreaming2