bLogEscalate
bLogEscalate
#Overview
name: bLogEscalate
The value of this variable can be defined or overridden in .ini config files. 4
.ini config files referencing this setting variable.
It is referenced in 7
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of bLogEscalate is to control whether logging occurs when the system escalates to a specific state in Unreal Engine’s network fault detection and handling system. This variable is primarily used for debugging and monitoring network-related issues.
This setting variable is primarily used in the network subsystem of Unreal Engine, specifically in the RPC (Remote Procedure Call) DoS (Denial of Service) detection mechanism and the network fault recovery system. It’s part of the Engine and Net modules.
The value of this variable is set in configuration files and can be modified per escalation state. It’s defined as a UPROPERTY with the ‘config’ specifier, which means it can be set in .ini configuration files.
bLogEscalate interacts with other variables related to network fault detection and escalation, such as bSendEscalateAnalytics, bKickPlayer, and various quota-related variables.
Developers must be aware that enabling this variable will increase logging output, which can be useful for debugging but may impact performance if left enabled in a production environment. It should be used judiciously, especially on performance-sensitive platforms or in shipping builds.
Best practices when using this variable include:
- Enable it during development and testing phases to help identify and diagnose network-related issues.
- Disable it in shipping builds unless absolutely necessary for troubleshooting.
- Use it in conjunction with other debugging tools and variables to get a comprehensive view of network behavior.
- Be prepared to handle and analyze the additional log output when this variable is enabled.
- Consider performance implications when enabling this on resource-constrained platforms.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEngine.ini:1751, section: [RPCDoSDetection.PersistentBurst]
- INI Section:
RPCDoSDetection.PersistentBurst
- Raw value:
true
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEngine.ini:1764, section: [RPCDoSDetection.DoS]
- INI Section:
RPCDoSDetection.DoS
- Raw value:
true
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEngine.ini:1780, section: [RPCDoSDetection.ExpensiveDoS]
- INI Section:
RPCDoSDetection.ExpensiveDoS
- Raw value:
true
- Is Array:
False
Location: <Workspace>/Engine/Config/BaseEngine.ini:1795, section: [RPCDoSDetection.Kick]
- INI Section:
RPCDoSDetection.Kick
- Raw value:
true
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Net/RPCDoSDetection.cpp:309
Scope (from outer to inner):
file
function void FRPCDoSStateConfig::ApplyState
Source code excerpt:
void FRPCDoSStateConfig::ApplyState(FRPCDoSState& Target)
{
Target.bLogEscalate = bLogEscalate;
Target.bSendEscalateAnalytics = bSendEscalateAnalytics;
Target.bKickPlayer = bKickPlayer;
Target.bTrackRecentRPCs = bTrackRecentRPCs;
Target.EscalateQuotaRPCsPerFrame = EscalateQuotaRPCsPerFrame;
Target.EscalateTimeQuotaMSPerFrame = EscalateTimeQuotaMSPerFrame;
Target.EscalateQuotaRPCsPerPeriod = EscalateQuotaRPCsPerPeriod;
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Net/RPCDoSDetection.cpp:618
Scope (from outer to inner):
file
function void FRPCDoSDetection::UpdateSeverity_Private
Source code excerpt:
FRPCDoSStateConfig& NewState = DetectionSeverity[NewStateIdx];
if (bLogEscalate)
{
UE_LOG(LogNet, Warning, TEXT("Updated RPC DoS detection severity for '%s' from '%s' to '%s' (Reason: %s)"),
*GetPlayerAddress(), *OldState.SeverityCategory, *NewState.SeverityCategory, LexToString(Reason));
}
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Net/RPCDoSDetection.cpp:711
Scope (from outer to inner):
file
function void FRPCDoSDetection::UpdateSeverity_Private
Source code excerpt:
}
if (bLogEscalate)
{
UE_LOG(LogNet, Warning, TEXT("Updated analytics RPC DoS detection severity from '%s' to '%s'."),
*DetectionSeverity[OldWorstState].SeverityCategory, *NewState.SeverityCategory);
// Log RPC's which could not be timed individually (as they won't display in analytics)
if (UntimedRPCs.Num() > 0)
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/Net/RPCDoSDetection.h:173
Scope: file
Source code excerpt:
/** Whether or not to log when escalating to this state */
UPROPERTY(config)
bool bLogEscalate = false;
/** Whether or not to send analytics when escalating to this state */
UPROPERTY(config)
bool bSendEscalateAnalytics = false;
/** Whether or not to kick the player when they escalate to this state */
#Loc: <Workspace>/Engine/Source/Runtime/Net/Core/Private/Net/Core/Connection/EscalationStates.cpp:285
Scope (from outer to inner):
file
namespace UE
namespace Net
function EEscalateResult FEscalationManager::UpdateSeverity
Source code excerpt:
}
if (State->bLogEscalate)
{
const TStructOnScope<FEscalationState>& NewState = EscalationSeverity[NewStateIdx];
UE_LOG(LogNetCore, Warning, TEXT("Updated '%s' severity state for '%s' from '%s' to '%s' (Reason: %s%s)"),
ToCStr(NewState.GetStruct()->GetName()), ToCStr(ManagerContext), ToCStr(OldState->GetStateName()),
ToCStr(NewState->GetStateName()), LexToString(Reason),
#Loc: <Workspace>/Engine/Source/Runtime/Net/Core/Private/Net/Core/Connection/NetConnectionFaultRecoveryBase.cpp:63
Scope (from outer to inner):
file
function EInitStateDefaultsResult FNetFaultState::InitConfigDefaultsInternal
Source code excerpt:
CooloffTime = 10;
AutoEscalateTime = 20;
bLogEscalate = true;
}
else if (SeverityCategory == TEXT("DisconnectCountdown"))
{
EscalateQuotaFaultPercentPerPeriod = 70;
DescalateQuotaFaultPercentPerPeriod = 56;
EscalateQuotaTimePeriod = 16;
CooloffTime = 10;
AutoEscalateTime = 60;
bLogEscalate = true;
}
else if (SeverityCategory == TEXT("Disconnect"))
{
bCloseConnection = true;
bLogEscalate = true;
EscalateQuotaTimePeriod = 0;
}
else
{
ReturnVal = EInitStateDefaultsResult::NotInitialized;
}
#Loc: <Workspace>/Engine/Source/Runtime/Net/Core/Public/Net/Core/Connection/EscalationStates.h:174
Scope: file
Source code excerpt:
/** Whether or not to log when escalating to this state */
UPROPERTY(config)
bool bLogEscalate = false;
/** This escalation state is considered to be dormant/inactive - and the escalation manager may no longer need ticking in this state */
UPROPERTY(config)
bool bDormant = false;
/** The amount of time, in seconds, before the current severity state cools off and de-escalates */