언리얼 엔진 로깅Permalink

언리얼 엔진에서의 로깅은 디버깅, 성능 최적화, 시스템 모니터링에 좋은 도구입니다.
실행 중 발생하는 다양한 정보를 수집하고, 문제를 파악하여 해결할 수 있습니다.

개발 중에는 로그를 통해 디버깅하는 습관이 매우 중요합니다.

일반적으로 로그 출력은 릴리스 빌드에서 비활성화됩니다.
다만, 프로젝트 최적화 단계나 출시 단계가 되면 불필요한 로그는 제거하거나 로그 레벨을 낮춰야 합니다.
너무 많은 로그는 성능 저하를 일으키고, 민감한 정보가 노출될 위험도 있기 때문입니다.

언리얼 엔진에서의 로깅은 런타임 중 특정 시점에 이벤트, 함수 호출 및 변수 값을 순서대로 기록할 수 있는 다양한 방법을 제공합니다.

창(Window) > 출력 로그(Output Log)로 이동하여 언리얼 에디터의 로그를 관찰할 수 있습니다.

로그는 프로젝트의 Saved/Logs 디렉터리에 .txt 파일로 저장됩니다.

릴리스 빌드에서 특정 로그를 비활성화하려면 DefaultEngine.ini에 다음과 같은 설정을 추가할 수 있습니다.

[Core.Log]
LogTemp=Warning
MyLogCategory=None

LogTemp로그는 Warning 수준까지만 출력하고, MyLogCategory는 완전히 비활성화합니다.

UE_LOGPermalink

UE_LOG는 디버깅과 개발 중 정보를 출력하는 데 사용되는 매크로입니다.

이를 통해 콘솔, 로그 파일, 출력 로그 창 등에 지정된 메시지를 기록할 수 있습니다.

예시는 다음과 같습니다.

// 기본 구조
UE_LOG(LogCategory, LogVerbosity, TEXT(""));
// 사용 예시
UE_LOG(LogTemp, Warning, TEXT("Hello World"));

LogCategory는 로그의 카테고리를 정의합니다.
어떤 시스템에서 발생한 로그인지 분류하기 위해 사용됩니다.
LogTemp는 주로 테스트나 간단한 디버깅 목적으로 사용되며, CoreGlobals.h에서 찾을 수 있는 DEFINE_LOG_CATEGORY매크로로 제공된 기본 임시 로그 카테고리 이름입니다.

LogVerbosity는 콘솔 및 로그 파일에 로그의 중요도나 상세 레벨을 설정합니다.
다양한 상세 레벨을 구성하여 특정 로그에서 줄바꿈을 허용하거나 로그 텍스트 컬러를 구성할 수 있습니다.

Text는 C 언어 라이브러리 함수인 printf의 스타일로 표시된 문자열 리터럴 포맷입니다.
메시지를 Unicode 형식으로 안전하게 변환합니다.
로그 메시지를 작성할 때 항상 TEXT를 사용해야합니다.

사용자 정의 로그 카테고리Permalink

사용자가 로그 카테고리를 정의하고, 사용할 수 있습니다.
별도의 분류가 필요한 여러 파일이나 프레임워크가 예시에 포함된 경우 유용할 수 있습니다.

릴리스 빌드에서 특정 카테고리의 로그만 활성화 가능합니다.

각기 다른 시스템(예: 렌더링, AI, UI)에 대한 로그를 독립적으로 관리 가능 해져 로그 검색 및 필터링이 용이합니다.

관련 헤더 파일에서 include 지시문 바로 아래에 다음을 추가합니다.

DECLARE_LOG_CATEGORY_EXTERN(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, All);

여기에서 <LOG_CATEGORY>는 사용자가 정의한 로그 카테고리 문자열이며, 로그 상세 레벨의 표에 나오는 값 중 하나여야 합니다.

<VERBOSITY_LEVEL>는 이 카테고리를 사용할 때 기본적으로 설정한 로그 수준 이상의 로그만 출력하도록 설정합니다.

C++ 파일 코드에서 이 카테고리를 다음과 같이 사용할 수 있습니다.

UE_LOG(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, TEXT("My log string."));

예시로는 다음과 같습니다.

// 헤더 파일
DECLARE_LOG_CATEGORY_EXTERN(MyLogCategory, Log, All);

// 소스 파일
DEFINE_LOG_CATEGORY(MyLogCategory);

// 사용자 정의 로그 호출
UE_LOG(MyLogCategory, Log, TEXT("custom log message"));

로그 상세 레벨Permalink

ELogVerbosity는 로깅 시스템의 상세 레벨을 정의하는 열거형입니다.
특정 로그 줄의 줄바꿈 또는 로그 텍스트 컬러 설정을 허용하는 상세 레벨과 관련되지 않은 추가 레벨을 정의합니다.

열거형 콘솔에 출력됨 에디터 로그에 출력됨 텍스트 컬러 추가 정보
Fatal 해당 없음 크래시를 발생시킵니다.
Error 빨간색 커맨드릿과 에디터가 오류를 수집하고 보고하며, 오류 메시지의 결과로 커맨드릿 실패가 발생합니다.
Warning 노란색 커맨드릿과 에디터가 경고를 수집하고 보고합니다.
Display 회색 해당 없음
Log 아니요 회색 해당 없음
Verbose 아니요 아니요 해당 없음 해당 카테고리에 상세 로깅이 활성화된 경우 상세 메시지를 로그 파일에 출력합니다.
일반적으로 상세 로깅에 사용됩니다.
VeryVerbose 아니요 아니요 해당 없음 상세 메시지를 로그 파일에 출력합니다.
VeryVerbose 로깅이 활성화된 경우 이는 다른 경우에 스팸으로 출력될 상세 로깅에 사용됩니다.

기본자료형 타입 로깅Permalink

FString

UE_LOG(LogTemp, Warning, TEXT("An Actor's name is %s"), *ExampleActor->GetName());

Bool

UE_LOG(LogTemp, Warning, TEXT("The boolean value is %s"), ( bExampleBool ? TEXT("true"): TEXT("false") ));

Integer

UE_LOG(LogTemp, Warning, TEXT("The integer value is: %d"), ExampleInteger);

Float

UE_LOG(LogTemp, Warning, TEXT("The float value is: %f"), ExampleFloat);

FVector

UE_LOG(LogTemp, Warning, TEXT("The vector value is: %s"), *ExampleVector.ToString());

여러 지정자

UE_LOG(LogTemp, Warning, TEXT("Current values are: vector %s, float %f, and integer %d"), *ExampleVector.ToString(), ExampleFloat, ExampleInteger);

UE_LOGFMTPermalink

UE_LOG와 유사한 역할을 하지만, 보다 더 직관적이고 간결한 코드를 작성할 수 있도록 형식화된 텍스트 포맷팅을 간편하게 지원하는 매크로입니다.

이름 기반의 변수 매칭을 지원해 다수의 변수와 복잡한 문자열 포맷을 사용하는 경우좋습니다.

FTextFormat을 활용해 보다 직관적이고 간결하게 문자열을 처리할 수 있도록 설계되었습니다.
가독성을 향상시키며, 다수의 변수와 함께 사용하는 경우 실수를 줄일 수 있습니다.

언리얼 엔진 5.2에서 도입되었습니다.

// 기본 구조
UE_LOGFMT(LogCategory, LogVerbosity, TEXT("Your log message: {VariableName}"), (VariableName));
// Positional 파라미터 사용 예시
UE_LOGFMT(LogCore, Warning, "Loading `{Name}` failed with error {Error}", Package->GetName(),  ErrorCode);
// Named 파라미터 사용 예시
UE_LOGFMT(LogCore, Warning, "Loading `{Name}` failed with error {Error}",("Name", Package->GetName()), ("Error", ErrorCode),("Flags", LoadFlags));

LogCategory는 로그 카테고리를 정의합니다.

LogVerbosity는 로그의 중요도를 설정합니다.

TEXT에서는 포맷 문자열을 정의하며, 변수명을 중괄호({})로 감쌉니다.

(VariableName)은 포맷 문자열에서 사용할 변수 리스트입니다.

로그 확인하기Permalink

로그를 출력하는 코드를 작성했다면, 언리얼 에디터에서 로그가 잘 나타나는지 확인해야합니다.

이 출력 로그에서는 엔진 전체에서 발생하는 로그 메시지가 실시간으로 표시됩니다.

출력 로그(Output Log) 창을 여는 방법은 언리얼 에디터 상단 메뉴에서 창(Window) > 출력 로그를 클릭하면 출력 로그 창이 열립니다.

UE_LOG-OpenOutputLog

해당 출력 로그에 너무 많은 로그가 있어 초기화 하고싶다면 출력 로그에 우클릭 > 로그 비우기(Clear Log)를 클릭하면 출력 로그 창이 비워집니다.

UE_LOG-Clear_Log

만약 특정 로그만 보고 싶다면 출력 로그창 상단에 필터(Filters) 메뉴를 이용해 카테고리 별로 로그를 걸러낼 수 있습니다.

UE_LOG-Filters

만약 필터 목록에 보고자 하는 로그 카테고리 자체가 보이지 않는다면, 아직 한 번도 해당 카테고리의 로그가 출력되지 않았을 수 있습니다.
반드시 로그가 최소 한 번 발생해야 목록에서 필터링할 수 있습니다.

UE5 카테고리 내 다른 글 보러가기

댓글남기기