디버깅 시 로그는 코드 실행 로직에 대한 세부 정보를 제공하는 귀중한 툴입니다. 함수 간에 전달되는 데이터 값을 조사하고 잠재적인 문제를 보고할 수 있습니다.
-
언리얼 엔진에서의 로깅은 런타임 중 특정 시점에 이벤트, 함수 호출 및 변수 값을 순서대로 기록할 수 있는 다양한 방법을 제공합니다.
-
창(Window) > 출력 로그(Output Log) 로 이동하여 언리얼 에디터의 로그를 관찰할 수 있습니다.

'출력 로그' 창은 언리얼 에디터에 있습니다.
- 로그는 프로젝트의
Saved/Logs
디렉터리에.txt
파일로 저장됩니다.
UE_LOG
UE_LOG 는 로그 파일에 포맷이 지정된 메시지를 로깅하는 매크로입니다.
예를 들면 다음과 같습니다.
UE_LOG(LogTemp, Warning, TEXT("Hello World"));
-
첫 번째 입력 파라미터인
LogTemp
는DEFINE_LOG_CATEGORY
매크로에 제공된 그대로의 카테고리 이름입니다. 언리얼 엔진에서 이러한 카테고리는CoreGlobals.h
에서 찾을 수 있습니다. 자체 커스텀 로깅 카테고리를 생성하려면 자체 로그 카테고리 정의 섹션을 참고하세요. -
두 번째 입력 파라미터인
Warning
은 콘솔 및 로그 파일에 경고를 출력하는 데 사용되는 상세 레벨입니다. 다양한 상세 레벨을 구성하여 특정 로그에서 줄바꿈을 허용하거나 로그 텍스트 컬러를 구성할 수 있습니다. 자세한 내용은 로그 상세 섹션을 참고하세요. -
세 번째 입력 파라미터인
Text
는 C 언어 라이브러리 함수인 printf의 스타일로 표시된 문자열 리터럴 포맷입니다.
로그 상세
ELogVerbosity 는 로깅 시스템의 상세 레벨을 정의하는 열거형입니다. 특정 로그 줄의 줄바꿈 또는 로그 텍스트 컬러 설정을 허용하는 상세 레벨과 관련되지 않은 추가 레벨을 정의합니다.
열거형 | 설명 |
---|---|
Fatal | 로깅이 비활성화된 경우에도 항상 치명적인 오류를 콘솔 및 로그 파일에 출력한 후 크래시를 발생시킵니다. |
Error | 오류를 콘솔 및 로그 파일에 출력합니다. 커맨드릿과 에디터가 오류를 수집하고 보고합니다. 오류 메시지의 결과로 커맨드릿 실패가 발생합니다. |
Warning | 경고를 콘솔 및 로그 파일에 출력합니다. 커맨드릿과 에디터가 경고를 수집하고 보고합니다. |
Display | 메시지를 콘솔 및 로그 파일에 출력합니다. |
Log | 메시지를 로그 파일에는 출력하지만 콘솔에는 출력하지 않습니다. |
Verbose | 해당 카테고리에 대해 상세 로깅이 활성화된 경우 상세 메시지를 로그 파일에 출력합니다. 일반적으로 상세 로깅에 사용됩니다. |
VeryVerbose | 상세 메시지를 로그 파일에 출력합니다. VeryVerbose 로깅이 활성화된 경우 이는 다른 경우에 스팸으로 출력될 상세 로깅에 사용됩니다. 다음은 몇 가지 샘플 로그 마스크와 특수 열거형 값입니다.
|
콘솔 명령
-LogCmds=
를 사용하여 명령줄에서 여러 다른 로그 카테고리의 상세 레벨을 변경할 수 있습니다.
예를 들면 다음과 같습니다.
-LogCmds="LogDerivedDataCache Verbose"
이 명령을 사용하면 특정 상세 레벨로 모든 로그 카테고리를 토글하는 'all' 카테고리를 포함하여 여러 카테고리를 지정할 수 있습니다.
기본적인 데이터 타입 로깅
아래 표에는 특정 데이터 타입을 로깅하는 방법에 대한 몇 가지 구문 포맷 지정 예시가 정리되어 있습니다.
데이터 타입 | 예시 |
---|---|
FString |
|
Bool |
|
Integer |
|
Float |
|
FVector |
|
여러 지정자 |
|
자체 로그 카테고리 정의
자체 로그 카테고리를 정의하고 이를 C++ 코드 예시에 사용할 수 있습니다. 별도의 분류가 필요한 여러 파일이나 프레임워크가 예시에 포함된 경우 유용할 수 있습니다. 관련 헤더 파일에서 include 지시문 바로 아래에 다음을 추가합니다.
DECLARE_LOG_CATEGORY_EXTERN(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, All);
여기에서 <LOG_CATEGORY>
는 커스텀 로그 카테고리 스트링이고,
로그 상세 레벨
상세 레벨 | 콘솔에 출력됨 | 에디터 로그에 출력됨 | 텍스트 컬러 | 추가 정보 |
---|---|---|---|---|
Fatal | 예 | 해당 없음 | 해당 없음 | 세션이 크래시됩니다. |
Error | 예 | 예 | 빨간색 | 해당 없음 |
Warning | 예 | 예 | 노란색 | 해당 없음 |
Display | 예 | 예 | 회색 | 해당 없음 |
Log | 아니요 | 예 | 회색 | 해당 없음 |
Verbose | 아니요 | 아니요 | 해당 없음 | 해당 없음 |
VeryVerbose | 아니요 | 아니요 | 해당 없음 | 로그 마스크 및 특수 열거형 값을 사용하여 텍스트 컬러를 구성할 수 있습니다. |
관련 C++ 파일에서 include 지시문 바로 아래에 다음을 추가합니다.
DEFINE_LOG_CATEGORY(<LOG_CATEGORY>);
이제 C++ 파일 코드에서 이 카테고리를 다음과 같이 사용할 수 있습니다.
UE_LOG(<LOG_CATEGORY>, <VERBOSITY_LEVEL>, TEXT("My log string."));
FOutputDevice
에서 파생하여 자체 출력을 구현할 수 있습니다.
UE_LOGFMT
UE_LOGFMT 는 Positional 또는 Named 파라미터를 지원하지만, 두 스타일을 혼합할 수 없는 구조화된 로그 이벤트를 기록합니다. 이 매크로를 사용하려면 Logging/StructeredLog.h
라이브러리 선언을 포함해야 합니다.
UE_LOGFMT
매크로는 언리얼 엔진 5.2에서 도입되었습니다. 현재 언리얼 엔진 버전이 최신인지 확인합니다.
파라미터 이름 | 설명 |
---|---|
Positional | Positional 파라미터를 사용할 경우 필드 값이 포맷으로 레퍼런스되는 필드와 일치해야 합니다. 예를 들면 다음과 같습니다.
|
Named | Named 파라미터를 사용할 경우 필드 값이 포맷으로 레퍼런스되는 모든 필드를 포함해야 합니다. 순서는 관련이 없고 추가 필드가 허용됩니다. 예를 들면 다음과 같습니다.
필드 이름이 '[A-Za-z0-9_]+' 포맷과 일치하고 이 로그 이벤트 내에서 고유해야 합니다. 필드 값은 SerializeForLog 또는
|
화면 디버그 메시지
또 다른 유용한 정보 전달 방법은 화면 디버그 메시지를 사용하는 것입니다. 다음 코드를 사용하여 화면 디버그 메시지를 추가할 수 있습니다.
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::White, TEXT("This is an Example on-screen debug message."));
}
-
첫 번째 입력 파라미터인 key 는 고유한 인티저 키를 사용하여 동일한 메시지가 여러 번 추가되지 않도록 방지합니다.
-
두 번째 입력 파라미터인 TimeToDisplay 는 플로트를 사용하여 메시지가 사라지기 전 메시지를 표시할 시간(초)을 지정합니다.
-
세 번째 입력 파라미터인 DisplayColor 는 텍스트를 표시할 컬러를 취합니다.
-
네 번째 입력 파라미터인 DebugMessage 는 표시할 메시지입니다. 로그와 비슷하게 화면 디버그 메시지에서 포맷 지정자 및 변수를 사용할 수 있습니다.