В Unreal Eengine 5 появился удобный макрос для логирования — UE_LOGFMT. Он позволяет логировать строки более гибко и безопасно.
Пример использования:
#include"Logging/StructuredLog.h"DEFINE_LOG_CATEGORY_STATIC(LogSlasherGame, All, All);const FString Name ="Patrick Bateman"; constbool 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"; constbool 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"; constbool 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 необходимо подключить заголовочный файл: