UE_LOGFMT

В Unreal Eengine 5 появился удобный макрос для логирования — UE_LOGFMT. Он позволяет логировать строки более гибко и безопасно.

Пример использования:

#include "Logging/StructuredLog.h" 
DEFINE_LOG_CATEGORY_STATIC(LogSlasherGame, All, All);

const FString Name = "Patrick Bateman"; 
const bool IsDead = false;
const int32 Ammo = 10;
UE_LOGFMT(LogSlasherGame, Display, "Name: {0}, is alive: {1}, ammo: {2}", Name, !IsDead, Ammo);

Сравнение с классическим UE_LOG:

#include "Logging/StructuredLog.h" 
DEFINE_LOG_CATEGORY_STATIC(LogSlasherGame, All, All);

const FString Name = "Patrick Bateman"; 
const bool IsDead = false; 
const int32 Ammo = 10;

UE_LOGFMT(LogSlasherGame, Display, "Name: {0}, is alive: {1}, ammo: {2}", Name, !IsDead, Ammo);
UE_LOG(LogSlasherGame, Display, TEXT("Name: %s, is alive: %s, ammo: %d"), *Name, IsDead ? TEXT("false") : TEXT("true"), Ammo);

UE_LOGFMT поддерживает именованные аргументы:

#include "Logging/StructuredLog.h" 
DEFINE_LOG_CATEGORY_STATIC(LogSlasherGame, All, All);

const FString Name = "Patrick Bateman"; 
const bool IsDead = false; 
const int32 Ammo = 10;

UE_LOGFMT(LogSlasherGame, Display, "Name: {name}, is alive: {alive}, ammo: {ammo}", Name, !IsDead, Ammo);

Результат логирования везде одинаковый:

Name: Patrick Bateman, is alive: true, ammo: 10

UE_LOGFMT использует современный подход к форматированию строк — string interpolation, подобно std::format (С++20), или анриловскому FString::Format, что обеспечивает безопасность типов (type safety) и улучшает читаемость.

Не забудьте, что для использования UE_LOGFMT необходимо подключить заголовочный файл:

#include "Logging/StructuredLog.h"

Last updated