KoreanFoodie's Study
[언리얼] Helper Function - 로그 (Log) 1 : 콘솔에 출력하기 본문
Game Dev/Unreal C++ : Dev Log
[언리얼] Helper Function - 로그 (Log) 1 : 콘솔에 출력하기
GoldGiver 2022. 4. 19. 14:17
언리얼 로그
언리얼은 UE_LOG 함수를 이용하여 로그를 출력한다.
먼저, .h 파일에 카테고리를 선언하고, 그에 맞는 정의를 .cpp 파일에서 Define 해주면 된다.
MyGame.h
//General Log
DECLARE_LOG_CATEGORY_EXTERN(LogMyGame, Log, All);
//Logging during game startup
DECLARE_LOG_CATEGORY_EXTERN(LogMyGameInit, Log, All);
MyGame.cpp
#include "MyGame.h"
//General Log
DEFINE_LOG_CATEGORY(LogMyGame);
//Logging during game startup
DEFINE_LOG_CATEGORY(LogMyGameInit);
헤더와 소스파일에 DECLARE / DEFINE 하는 것 대신, .cpp 파일에 아래 DEFINE_LOG_CATEGORY_STATIC 한줄만 넣어 주어도 된다.
// CategoryName : 생성하고자 하는 카테고리 명
// DefaultVerbosity : 로깅 수준
// CompileTimeVerbosity : 어느 상황에 로그를 출력할지
// 카테고리 이름, 경고 수준, 보여주는 범위
DEFINE_LOG_CATEGORY_STATIC(MyGameLog, Log, All);
흔히 verbosity 에서는 Warning 을 넣어 노란색으로 출력되도록 만든다.
간단한 예시를 보자.
CLog.cpp
DECLARE_LOG_CATEGORY_STATIC(BasicLog, Log, All);
#define CLOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define CLOG_S(Verbosity) UE_LOG(BasicLog, Verbosity, TEXT("%s"), *CLOG_CALLINFO)
#define CLOG(Verbosity, Format, ...) UE_LOG(BasicLog, Verbosity, TEXT("%s%s"), *CLOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
#define CCHECK(Expr, ...) {if(!(Expr)) { CLOG(Error, TEXT("ASSERTION : %s"), TEXT("'"#Expr"'")); return __VA_ARGS__;}}
각각의 매크로에 대한 설명은 다음과 같다 :
- CLOG_CALLINFO : 함수 이름과 코드 위치를 FString 으로 return 한다 (로그를 수행하지 않음)
- CLOG_S : 인자로 전달된 경고 수준 (Verbosity) 으로, CLOG_CALLINFO 의 정보를 출력한다.
- CLOG : CLOG_S 에 사용자가 전달하고 싶은 텍스트를 추가로 전달한다.
- CCHECK : 인자가 null 일때 에러 메시지를 출력한다. 추가적으로 인자를 리턴할 수 있다.
실제 사용 예시는 다음과 같다.
CLOG_S(Warning);
CLOG(Warning, TEXT("Log this : %s"), TEXT("Hello"));
CCHECK(nullptr, false); // 에러 로그를 출력하며, 현재 함수의 리턴값으로 false 를 전달
더 간단하게는, 매크로를 쓰지 않고 다음과 같이 사용할 수도 있다.
UE_LOG(LogTemp, Warning, TEXT("EquipWeapon is Called!"));
LogTemp 카테고리를 써 주면 된다!
참/거짓 체크
자매품으로, True/False 값을 간단하게 체크하는 매크로도 사용해 보자
Define.h
#define CheckNull(p){ if(p == NULL) return; }
#define CheckNullResult(p, result){ if(p == NULL) return result; }
#define CheckTrue(p){ if(p == true) return; }
#define CheckTrueResult(p, result){ if(p == true) return result; }
#define CheckFalse(p){ if(p == false) return; }
#define CheckFalseResult(p, result){ if(p == false) return result; }
언리얼에는 여러 매크로가 정의되어 있는데, '에디터'에서만 사용하고, 실제 쉬핑 빌드에서는 사용하고 싶지 않다... 면 다음과 같은 매크로를 활용하자! 😄
#if WITH_EDITOR
CLOG(Warning, TEXT("This is editor only debug log"));
#endif
'Game Dev > Unreal C++ : Dev Log' 카테고리의 다른 글
[언리얼] Helper Function : 오브젝트 생성 및 애셋 불러오기 (0) | 2022.04.19 |
---|---|
[언리얼] Helper Function - 로그 (Log) 2 : 화면에 출력하기 (0) | 2022.04.19 |
언리얼 실습용 게임 WithTheLight 기획 (0) | 2022.03.28 |
언리얼 UPROPERTY 자동 들여쓰기 조정 (0) | 2022.03.26 |
언리얼 모듈 빌드 에러 - 게임 모듈을 로드하지 못했습니다. 운영체제 오류가 있거나 모듈 설정이 제대로 되지 않았을 수 있습니다. (0) | 2022.03.22 |
Comments