Logs, Printing Class Name, Function Name, Line Number

@alert info This is a legacy article imported from the old wiki. An updated version can be found here: [Not Created Yet] @endalert Overview You can even get a UE4 FString telling you the whole func...

This is a legacy article imported from the old wiki.

An updated version can be found here: [Not Created Yet]

Overview

You can even get a UE4 FString telling you the whole function signature of the function you are in, including variable types!

You also get a pre-processor command that prints a message to the screen including the class name and line number!

File:JoyStringCurrentClassFuncLineNumber2.jpg

//~~~ Tick ~~~ void AEVCoreDefense::Tick(float DeltaTime) { Super::Tick(DeltaTime); //~~~~~~~~~~~~~ VSCREENMSG("Got Here!"); //Class and line number get printed for you! ÔÖÑ Rama }

File:JoyStringCurrentClassFuncLineNumber3.jpg

Code

Simply put this somewhere at the top of one of your core classes.

// Joy Class Func Line #include "JoyCurrentClassFuncLine.h"
/* Joy String Current Class, File, and Line Number! by Rama PreProcessor commands to get a. Class name b. Function Name c. Line number d. Function Signature (including parameters) Gives you a UE4 FString anywhere in your code that these macros are used! Ex: You can use JOYSTR_CUR_CLASS anywhere to get a UE4 FString back telling you what the current class is where you called this macro! Ex: This macro prints the class and line along with the message of your choosing! VSCREENMSG("Have fun today!"); AddOnScreenDebugMessage(-1, 5.f, FColor::Red, *(JOYSTR_CUR_CLASS_LINE + ": " + Param1)) ) #define VSCREENMSG2(Param1,Param2) (GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, *(JOYSTR_CUR_CLASS_LINE + ": " + Param1 + " " + Param2)) ) #define VSCREENMSGF(Param1,Param2) (GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, *(JOYSTR_CUR_CLASS_LINE + ": " + Param1 + " " + FString::SanitizeFloat(Param2))) ) //UE LOG #define V_LOG(LogCat, Param1) UE_LOG(LogCat,Warning,TEXT("%s: %s"), *JOYSTR_CUR_CLASS_LINE, *FString(Param1)) #define V_LOG2(LogCat, Param1,Param2) UE_LOG(LogCat,Warning,TEXT("%s: %s %s"), *JOYSTR_CUR_CLASS_LINE, *FString(Param1),*FString(Param2)) #define V_LOGF(LogCat, Param1,Param2) UE_LOG(LogCat,Warning,TEXT("%s: %s %f"), *JOYSTR_CUR_CLASS_LINE, *FString(Param1),Param2) #define V_LOGM(LogCat, FormatString , ...) UE_LOG(LogCat,Warning,TEXT("%s: %s"), *JOYSTR_CUR_CLASS_LINE, *FString::Printf(TEXT(FormatString), ##__VA_ARGS__ ) )

V_LOG

Each of the V_LOG Macros takes as the first parameter the log category that you want to use

#define V_LOG(LogCat, Param1) UE_LOG(LogCat,Warning,TEXT("%s: %s"), *JOYSTR_CUR_CLASS_LINE, *FString(Param1))

V_LOGM

V_LOGM is special in that you can have an arbitrary number of vars that you output, and of any type, similar to standard UE_LOG functionality

Example usage:

int32 Health = 100; float ArmorPct = 52.33; FVector Location(33,12,1); V_LOGM(Joy, "Health: %d, ArmorPct: %f, Loc: %s", Health, ArmorPct, *Location.ToString());

More Info

VS C++ Predifined Macros

Variadic Macros

Updated ago