-
[UE5] 매크로를 이용한 사용자 정의 로그UE5 2024. 12. 10. 07:06
새로운 로그 카테고리를 지정하는 이유
A. 로그의 필터링 및 가독성
- 프로젝트가 커질수록 여러 서브시스템(네트워크, 렌더링, AI 등)에서 로그가 발생
- LogABNetwork와 같은 고유 로그 카테고리를 사용하면 특정 서브시스템의 로그만 필터링해서 볼 수 있음
- 예: 네트워크 관련 디버깅 시, LogABNetwork만 활성화하여 로그를 확인.
- 콘솔 명령어 Log LogABNetwork Verbose를 사용하여 해당 카테고리의 Verbose 로그만 활성화 가능.
B. 유지보수성과 디버깅 용이성
- 로그 메시지가 어떤 기능이나 모듈에서 발생했는지 명확하게 나타낼 수 있음
- 문제 발생 시 어떤 서브시스템에서 로그가 생성되었는지 바로 파악 가능.
- 예: 네트워크 모듈의 로그는 LogABNetwork, UI 모듈의 로그는 LogABUI.
C. 로그 레벨 설정
- 로그 카테고리별로 출력 레벨(Verbose, Warning, Error 등)을 개별 설정 가능.
- 네트워크 디버깅 중에는 LogABNetwork 카테고리만 Verbose로 설정하고, 나머지 카테고리는 Warning 이상만 출력하도록 설정 가능.
D. 협업 및 코드 구조화
- 여러 팀원이 함께 작업하는 대규모 프로젝트에서는 카테고리를 지정하면 각 팀별로 로그 카테고리를 독립적으로 관리할 수 있음
- 네트워크 팀은 LogABNetwork, AI 팀은 LogABAI 등.
UE_LOG와 DECLARE_LOG_CATEGORY_EXTERN의 역할
A. DECLARE_LOG_CATEGORY_EXTERN
- 특정 로그 카테고리를 선언
- DECLARE_LOG_CATEGORY_EXTERN(LogABNetwork, Log, All);
- 다른 모듈이나 파일에서 이 카테고리를 사용할 수 있도록 글로벌로 정의
B. DEFINE_LOG_CATEGORY
- 로그 카테고리를 정의.
- DEFINE_LOG_CATEGORY(LogABNetwork);
- 정의는 단일 cpp 파일에 있어야 하며, 이 카테고리를 활성화
C. UE_LOG
- 로그 메시지를 출력
- UE_LOG(LogABNetwork, Warning, TEXT("Network initialized successfully"));
- 지정된 카테고리를 사용하여 로그 메시지를 기록하며, 로그의 Verbosity(Warning, Error 등)에 따라 출력이 달라짐
매크로를 사용한 커스터마이징의 이점
#define LOG_CALLINFO ANSI_TO_TCHAR(__FUNCTION__) #define AB_LOG(LogCat, Verbosity, Format, ...) UE_LOG(LogCat, Verbosity, TEXT("%s %s"), LOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__)) // 기존 UE_LOG 방식 UE_LOG(LogCat, Verbosity, TEXT("Message: %s"), *FString::Printf(TEXT("Hello"))); // 사용자 정의 로그 AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin"));
A. 가독성 향상
- AB_LOG(LogABNetwork, Warning, TEXT("Message: %s"), *FString("Hello"));
- UE_LOG에 비해 간결하며, 특정 형식을 강제하거나 반복적인 작업을 줄임.
B. 일관성 유지
- 여러 파일에서 로그 메시지를 출력할 때 일관된 형식을 유지할 수 있음.
- 예: TEXT("%s")를 매크로에 포함하여, 항상 동일한 문자열 포맷을 사용.
C. 추가 기능 통합
- 필요에 따라 로그 메시지에 타임스탬프, 파일 이름, 라인 번호 등을 포함하도록 확장 가능.
- 위에서 LOG_CALLINFO 매크로를 추가하여 어느 함수에서 로그가 실행되는지 알 수 있게 함
#define AB_LOG(LogCat, Verbosity, Format, ...) UE_LOG(LogCat, Verbosity, TEXT("[%s:%d] %s"), TEXT(__FILE__), __LINE__, *FString::Printf(Format, ##__VA_ARGS__))
네트워크 관련 로그를 별도로 관리하는 이유
네트워크는 프로젝트의 핵심 모듈 중 하나로, 별도의 로그 카테고리를 지정하면 다음과 같은 장점이 있음
- 네트워크 이벤트 추적
- 서버 연결, 패킷 전송/수신, 연결 끊김 등의 이벤트를 쉽게 구분하여 추적 가능.
- 디버깅 및 최적화
- 네트워크 관련 병목 현상, 지연 문제 등을 해결할 때 네트워크 로그만 분석 가능.
- 다른 서브시스템과 독립성 유지
- 네트워크 로그와 렌더링, AI 등의 로그를 분리하여 분석 효율성을 높임.
새로운 로그 카테고리를 지정하는 것은 프로젝트의 구조화, 유지보수, 디버깅 효율성을 높이는 데 매우 유용하다. 특히 네트워크와 같은 중요한 서브시스템에서는 별도의 카테고리를 사용하는 것이 필수적이다.
'UE5' 카테고리의 다른 글
[UE5] 액터 리플리케이션 (0) 2024.12.17 [UE5] 클라이언트-서버 연결시 호출 함수 정리 (0) 2024.12.12 [UE5] 네트워크 멀티플레이어 (0) 2024.12.10 [UE5] 추상클래스와 인터페이스 (0) 2024.12.06 [UE5] 순수 가상 함수(Pure Virtual Function) (0) 2024.12.06