Log Macro with Netmode and Colour - Epic Wiki
# Log Macro with Netmode and Colour
# Contents
# Overview
Macro that adds the current netmode and colour to logging, as well as making it easier to use.
Not recommended as a replacement for UE_LOG, but as a quick'n dirty tool for rapid iteration.
# YourProject.h
#define NETMODE_WORLD (((GEngine == nullptr) || (GetWorld() == nullptr)) ? TEXT("") \ : (GEngine->GetNetMode(GetWorld()) == NM_Client) ? TEXT("[Client] ") \ : (GEngine->GetNetMode(GetWorld()) == NM_ListenServer) ? TEXT("[ListenServer] ") \ : (GEngine->GetNetMode(GetWorld()) == NM_DedicatedServer) ? TEXT("[DedicatedServer] ") \ : TEXT("[Standalone] ")) #if _MSC_VER #define FUNC_NAME TEXT(__FUNCTION__) #else // FIXME - GCC? #define FUNC_NAME TEXT(__func__) #endif #define TRACE(Format, ...) \ { \ SET_WARN_COLOR(COLOR_CYAN);\ const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \ if (Msg == "") \ { \ UE_LOG(LogYourCategory, Log, TEXT("%s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *GetNameSafe(this));\ } \ else \ { \ UE_LOG(LogYourCategory, Log, TEXT("%s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *Msg);\ } \ CLEAR_WARN_COLOR();\ } #define TRACESTATIC(Format, ...) \ { \ SET_WARN_COLOR(COLOR_CYAN);\ const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \ UE_LOG(LogYourCategory, Log, TEXT("%s() : %s"), FUNC_NAME, *Msg);\ CLEAR_WARN_COLOR();\ } #define TRACEWARN(Format, ...) \ { \ SET_WARN_COLOR( COLOR_YELLOW );\ const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \ UE_LOG(LogYourCategory, Log, TEXT("**WARNING** %s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *Msg);\ CLEAR_WARN_COLOR();\ } #define TRACEERROR(Format, ...) \ { \ SET_WARN_COLOR( COLOR_RED );\ const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \ UE_LOG(LogYourCategory, Log, TEXT("**ERROR** %s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *Msg);\ CLEAR_WARN_COLOR();\ } #define SCREENDEBUG(Format, ...) \ { \ const FString Msg = FString::Printf(TEXT(Format), ##__VA_ARGS__); \ if (Msg == "") \ { \ TCHAR StdMsg[MAX_SPRINTF] = TEXT(""); \ FCString::Sprintf(StdMsg, TEXT("%s%s() : %s"), NETMODE_WORLD, FUNC_NAME, *GetNameSafe(this)); \ GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::White, StdMsg); \ } \ else \ { \ GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::White, Msg); \ } \ }
# YourProject.cpp
DEFINE\_LOG\_CATEGORY( LogYourCategory );
# Examples
# Function logging
Usage:
void USomeClass::WithSomeFunction() { TRACE(""); }
Output:
LogYourCategory: [Standalone] USomeClass::WithSomeFunction() :
# Variable logging
Usage:
void USomeClass::WithSomeFunction() { TRACE("Name: %s, Health %d, DistanceToEnemy: %f", *PlayerName.ToString(), Health, GetDistance(EnemyLoc)); }
Output:
LogYourCategory: [Client] USomeClass::WithSomeFunction() : Name: DudeGuy, Health 76, DistanceToEnemy: 128.0512
# Credits
Spoof - original implementation.
Kris - simplification & netmode.
Retrieved from "https://wiki.unrealengine.com/index.php?title=Log_Macro_with_Netmode_and_Colour&oldid=14089"