Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

MOONSUN

[UE5] 로그 출력 (FString타입 , 커스텀 로그 카테고리, 로그 매크로) 본문

UE5

[UE5] 로그 출력 (FString타입 , 커스텀 로그 카테고리, 로그 매크로)

MoonSun_v 2026. 4. 1. 14:50

 

FString 형식을 가져올 때는 → * 필수로 붙여야 함 

 

 

 

1. UE_LOG 로그 출력

콘솔(로그 창)에 메시지를 찍는 함수

 

 

UE_LOG(카테고리, 로그레벨, TEXT("내용"))

  • 카테고리 → 어떤 종류의 로그인지 (필터용)
  • 로그레벨 → 중요도 (Warning, Error 등)
  • 내용 → 출력할 메시지

 

UE_LOG(LogTemp,Warning,TEXT("AMyActor Constructor Called!"));
"임시 카테고리(LogTemp)로 Warning 수준 로그를 찍는다"

 

 

AMyActor::AMyActor()
{
	PrimaryActorTick.bCanEverTick = true;

	// UE_LOG(카테고리, 로그레벨, TEXT("내용"));
	UE_LOG(LogTemp, Warning, TEXT("AMyActor Constructor Called!"));
	UE_LOG(LogTemp, Warning, TEXT("%s"), *GetName()); **// FString 형식 → * 필수로 붙여야 함**
	...
	}

 

(참고) FString 출력할 때 주의

언리얼 로그는 C 스타일 문자열(TCHAR)만 받기 때문에 * 붙여야 함

UE_LOG(LogTemp, Warning, TEXT("%s"), *GetName());
  • %s → 문자열 출력
  • GetName() → FString 반환
  • GetName() → FString → TCHAR*로 변환 (필수)

 

 

 

 

 

2. 커스텀 로그 카테고리

LogTemp 대신 내가 만든 이름으로 로그를 구분

 

 

2-1. 선언 (헤더 파일)

DECLARE_LOG_CATEGORY_EXTERN(MoonLog, Log, All);

 

"MoonLog라는 로그 카테고리 쓸 거다.”

 

 

 

2-2. 정의 (cpp 파일)

DEFINE_LOG_CATEGORY(MoonLog);

 

"MoonLog 실제로 생성”

 

 

 

2-3. 사용

UE_LOG(MoonLog, Warning, TEXT("%s"), *GetName());
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h" 

**DECLARE_LOG_CATEGORY_EXTERN(MoonLog, Log, All); // 로그 카테고리 선언**

UCLASS()
class UNREALSTUDY_API AMyActor : public AActor
{
	GENERATED_BODY()
	
public:	
	AMyActor();
...
} 
#include "MyActor.h"

**DEFINE_LOG_CATEGORY(MoonLog); // 로그 카테고리 정의**

AMyActor::AMyActor()
{
	PrimaryActorTick.bCanEverTick = true;

	UE_LOG(**MoonLog**, Warning, TEXT("%s"), *GetName()); **// 커스텀 로그 사용**
...
}

 

 

 

 

 

 

 

3. UE_LOG를 감싼 매크로

UE_LOG를 짧고 편하게 쓰려고 만든 래퍼(wrapper)

 

 

3-1. 매크로 정의

#define ABLOG(Verbosity, Format, ...) \\
    UE_LOG(LogMyActor, Verbosity, TEXT(Format), ##__VA_ARGS__)

 

매번 UE_LOG 쓰기 귀찮으니까 ABLOG로 줄임

 

 

3-2. 사용

ABLOG(Warning, "AMyActor Constructor Called!");

 

실제로 내부에서는 아래처럼 동작 하는 것]

UE_LOG(LogMyActor, Warning, TEXT("AMyActor Constructor Called!"));

 

 

3-3. 변수 포함

ABLOG(Warning, "Actor Name : %s", *GetName());

 

그대로 UE_LOG랑 동일하게 사용 가능

 

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h" // .generatred.h 파일은 항상 가장 마지막 선언 

DECLARE_LOG_CATEGORY_EXTERN(LogMyActor, Log, All);  // 로그 카테고리

// ABLOG 매크로
#define ABLOG(Verbosity, Format, ...) \\
    UE_LOG(LogMyActor, Verbosity, TEXT(Format), ##__VA_ARGS__)

// 화면 출력 매크로
#define ABLOG_S(Format, ...) \\
    if (GEngine) \\
    { \\
        GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, \\
            FString::Printf(TEXT(Format), ##__VA_ARGS__)); \\
    }
AMyActor::AMyActor()
{
	PrimaryActorTick.bCanEverTick = true;

	// -----------------------------------------------------------------------------------
	// 로그 
	// -----------------------------------------------------------------------------------

	// 로그 출력
	ABLOG(Warning, "AMyActor Constructor Called!");

	// 변수 포함 로그
	ABLOG(Warning, "Actor Name : %s", *GetName());

	// 화면 출력
	ABLOG_S("Hello World");

	// 화면 + 값 출력
	ABLOG_S("Actor Name : %s", *GetName());

...
}