SML 로깅
SML 로깅 시스템은 모드 개발 시 필수적인 자원입니다. 특히 디버거로 디버깅할 수 없는 블루프린트 모드에서 더욱 그렇습니다.
로깅한 메시지들은 텍스트 파일에 기록되며, 사용자가 새티스팩토리 모드 관리자를 사용하여 디버그 로그를 생성할 때 자동으로 제출됩니다.
로그 파일은 게임을 실행할 때마다 새로 생성되며,
여러 개의 게임을 동시에 실행하는 경우
파일 이름 뒤에 접미사가 붙어 구분됩니다(예: FactoryGame_2.log
)
블루프린트에서 로깅하기
SML 블루프린트 라이브러리가 제공하는 로그 함수를 사용하면 대부분의 유형을 문자열로 변환하여 로깅할 수 있습니다.
이 함수로 로깅한 문자열은 LogYourModReference
로그 범주 아래에 표시되며,
이 범주는 아직 없다면 자동으로 생성됩니다.
C++에서 로깅하기
C++에서 로깅은 주로 UE_LOG
매크로나,
언리얼 엔진 5.2에서 도입된 새로운 UE_LOGFMT
매크로를 통해 이루어집니다.
이 언리얼 엔진 커뮤니티 위키 페이지는 매크로 사용법, 커스텀 로그 범주 설정 방법, 그리고 매크로의 포맷팅 기능에 대해 잘 설명하고 있습니다.
SML의 자동 생성된 블루프린트 로깅 범주와 이름과 동작이 일치하는 로그 범주 정의 예시:
모드참조.h
에서:
DECLARE_LOG_CATEGORY_EXTERN(LogYourModReference, Verbose, All);
모드참조.cpp
에서:
DEFINE_LOG_CATEGORY(LogYourModReference);
로깅을 사용할 cpp 파일에서:
#include "모드참조.h"
// [...]
UE_LOG(LogYourModReference, Verbose, TEXT("Hello World!"));
헤더에서 범주 이름이 두 번째 인자는 기본 상세도로, SML의 값과 일치할 필요는 없습니다. 블루프린트 로그 범주( |
대부분의 C++ 매크로와 마찬가지로, 문법을 잘못 사용하면 복잡한 컴파일 에러가 발생할 수 있으므로, 처음 사용할 때는 자주 컴파일하여 실수를 일찍 발견하는 것이 좋습니다.
실제 UE_LOG 사용 예시를 보려면 오픈 소스 C++ 모드를 참고해 보십시오.
예시:
기본 동작
기본적으로 게임은 CSS가 구성한 로깅 상세도 설정을 따르며,
그 다음으로 %LOCALAPPDATA%\FactoryGame\Saved\Config\Windows\Engine.ini
에서
설정한 값을 따릅니다.
이러한 설정으로 모든 모드 로깅 호출이 터미널과 FactoryGame.log
에 표시됩니다.
특정 모드의 로그 리디렉션
언리얼 엔진의 LogCategoryFiles
실행 인수를 사용하여 특정 로그 범주를 별도의 파일로 리디렉션할 수 있습니다.
이렇게 하면 FactoryGame.log
에 표시되는 것 외에도
지정한 파일에도 로그가 기록됩니다.
실행 인수에 지정된 경로는 Local Appdata인 기본 로그와 달리 게임 설치 디렉터리를 기준으로 합니다.
예를 들어, -LogCategoryFiles="FilteredLogs\LogExampleMod.log=LogExampleMod"
인수를 사용하면
LogExampleMod.log 파일이 <게임 설치 경로>\SatisfactoryExperimental\Engine\Binaries\Win64\FilteredLogs\LogExampleMod.log
에 생성됩니다.
로그 파일을 기본 FactoryGame.log와 같은 폴더에 저장하려면 전체 경로를 사용해야 합니다. 예:
-LogCategoryFiles="C:\Users\사용자이름\AppData\Local\FactoryGame\Saved\Logs\LogSlate.log=LogSlate"
여러 모드를 하나의 파일로 그룹화하려면 플러스를 사용할 수 있습니다. 예: TODO: Arch 예시