В 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 необходимо подключить заголовочный файл: