ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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__))

     

     

    네트워크 관련 로그를 별도로 관리하는 이유

    네트워크는 프로젝트의 핵심 모듈 중 하나로, 별도의 로그 카테고리를 지정하면 다음과 같은 장점이 있음

    1. 네트워크 이벤트 추적
      • 서버 연결, 패킷 전송/수신, 연결 끊김 등의 이벤트를 쉽게 구분하여 추적 가능.
    2. 디버깅 및 최적화
      • 네트워크 관련 병목 현상, 지연 문제 등을 해결할 때 네트워크 로그만 분석 가능.
    3. 다른 서브시스템과 독립성 유지
      • 네트워크 로그와 렌더링, AI 등의 로그를 분리하여 분석 효율성을 높임.

     

    새로운 로그 카테고리를 지정하는 것은 프로젝트의 구조화, 유지보수, 디버깅 효율성을 높이는 데 매우 유용하다. 특히 네트워크와 같은 중요한 서브시스템에서는 별도의 카테고리를 사용하는 것이 필수적이다.

Designed by Tistory.