Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 정렬
- 언리얼엔진구조체
- 알고리즘
- C++
- dataasset
- moreeffectiveC++
- enumasByue
- 델리게이트
- UE4 커스텀로그
- 크리티컬섹션
- 애셋로드
- 람다사용정렬
- 선택정렬
- UELOG
- BFS
- 프로그래머스
- 약참조
- UE_LOG
- 데이터애셋
- unorder_map
- UML관련
- 람다
- 자료구조
- stl
- 강참조
- C++최적화
- 정렬알고리즘
- 언리얼가비지컬렉터
- map
- 스마트포인터
Archives
- Today
- Total
기억을 위한 기록들
[UE4-CPP] 커스텀 로그(LOG) 만들기 본문
프로젝트명.h과 프로젝트명.CPP 에 커스텀 로그 카테고리를 설정
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(BLOG_LOG, Log, All); //추가
#include "blogCPP.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, blogCPP, "blogCPP" );
DEFINE_LOG_CATEGORY(BLOG_LOG); //추가
프로젝트명.h 에 한개씩 추가.
1. 호출된 함수의 이름과 라인 매크로를 String화(Call Info) 시켜주는 매크로
#define LOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
LOG_CALLINFO(이하 콜정보)를 호출해주면 함수이름을 알수 있게 된다.
해당 콜 정보를 UE_LOG에서 string호출로 출력해보게 되면,
로그카테고리명: 클래스명::함수이름(호출된 라인수)
출력이 된다. 하지만 이렇게 사용하기엔 조금 아쉽다. 콜 정보를 좀 더 쉽게 호출해보자.
2. Call Info를 쉽게 호출해주는 로그만들기
#define LOG_S(Verbosity) UE_LOG(BLOG_LOG, Verbosity, TEXT("%s"), *LOG_CALLINFO)
해당 LOG_S를 호출하게되면, 로그 카테고리를 안써도되고, 로그 수준만 작성해주면 되어 간단하게 호출할수 있게 된다.
Warning을 넣어 노란색으로 출력되었다.
3. Call Info를 쉽게 호출해주는 로그에 원하는 텍스트 넣기
#define LOG(Verbosity, Format, ...) UE_LOG(BLOG_LOG, Verbosity, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
원하는 Text도 출력되는것을 확인하였다.
그 외
4. Verbosity 인자 제외 후 매크로 화 시키기
#define LOG_WARNING(Format, ...) UE_LOG(BLOG_LOG, Warning, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
#define LOG_ERROR(Format, ...) UE_LOG(BLOG_LOG, Error, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
5. 기존 C/C++에서 Assert와 비슷한 용도 CHECK만들기
#define CHECK(Expr, ...) {if(!(Expr)) {LOG(Error, TEXT("ASSERTION : %s"), TEXT("'"#Expr"'")); return __VA_ARGS__;}}
tempbool이 true라면 아무런 출력도 발생하지 않지만, false라서 해당 tempbool에 대한 어설션로그를 찍어준다.
6. 출력로그 말고 게임스크린 간단하게에 찍기
#define LOG_SCREEN(Format, ...) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(Format, ##__VA_ARGS__))
요약
프로젝트.h
#pragma once
#include "CoreMinimal.h"
/*아래 전부 추가*/
DECLARE_LOG_CATEGORY_EXTERN(BLOG_LOG, Log, All);
//1. 호출된 함수의 이름과 라인 매크로를 String화 시킴
#define LOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
//2. 1번 CallInfo와 함께 아무 내용이 없는 로그를 찍는 매크로
#define LOG_S(Verbosity) UE_LOG(BLOG_LOG, Verbosity, TEXT("%s"), *LOG_CALLINFO)
//3. CallInfo와 함께 텍스트로 로그를 찍는 매크로
#define LOG(Verbosity, Format, ...) UE_LOG(BLOG_LOG, Verbosity, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
//4. LOG에 Verbosity를 인자에서 빼고 매크로화 시킨것.
#define LOG_WARNING(Format, ...) UE_LOG(BLOG_LOG, Warning, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
#define LOG_ERROR(Format, ...) UE_LOG(BLOG_LOG, Error, TEXT("%s %s"), *LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
//5. assert()와 거의 비슷한 용도로 사용가능한 매크로
#define CHECK(Expr, ...) {if(!(Expr)) {LOG(Error, TEXT("ASSERTION : %s"), TEXT("'"#Expr"'")); return __VA_ARGS__;}}
//6. 게임 플레이 스크린에다가 LOG를 직접 찍는 매크로
#define LOG_SCREEN(Format, ...) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(Format, ##__VA_ARGS__))
프로젝트.cpp
#include "blogCPP.h"
#include "Modules/ModuleManager.h"
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, blogCPP, "blogCPP" );
DEFINE_LOG_CATEGORY(BLOG_LOG); //추가
설명하면서 하다보니 이것저것 있는데 주로 많이 사용할건 CallInfo와 텍스트를 호출하는 LOG와 Assert기능인 CHECK 매크로를 자주 사용하지 않을까 싶다.
참고: developstudy.tistory.com/40
'UnrealEngine > UE4 - CPP' 카테고리의 다른 글
[UE4-CPP] 개인메모 PrimitiveComponent Overlap C++ 구현 (0) | 2021.06.20 |
---|---|
[UE4-CPP] 기본로그(UE_LOG)에 관하여 (1) | 2021.05.16 |
[UE4-CPP] 언리얼엔진4(UE4)에서 C++ 구조체 만들고 데이터 테이블 사용하기 (2) | 2021.04.02 |
[UE4-CPP] 커스텀 플러그인 C++에서 사용 시 설정 하나 (0) | 2021.03.18 |
[UE4-CPP] 애님 몽타주 BlendOut/Complete 델리게이트 사용 예 (2) | 2021.03.07 |