SML 로깅

SML 로깅 시스템은 모드 개발 시 필수적인 자원입니다. 특히 디버거로 디버깅할 수 없는 블루프린트 모드에서 더욱 그렇습니다.

로깅한 메시지들은 텍스트 파일에 기록되며, 사용자가 새티스팩토리 모드 관리자를 사용하여 디버그 로그를 생성할 때 자동으로 제출됩니다.

로그 파일은 게임을 실행할 때마다 새로 생성되며, 여러 개의 게임을 동시에 실행하는 경우 파일 이름 뒤에 접미사가 붙어 구분됩니다(예: FactoryGame_2.log)

로그 보기

기본적으로 게임 클라이언트의 로그는 \AppData\Local\FactoryGame\Saved\Logs\FactoryGame.log에 저장됩니다. 다른 플랫폼의 로그 파일 위치에 대한 정보는 FAQ를 참고하십시오.

게임이 실행되는 동안 터미널에서 실시간으로 로그를 볼 수도 있습니다. 터미널을 보려면 게임 실행 인수에 -log를 추가하십시오. 여기에서 설명한 대로 -log -NewConsole을 사용하여 향상된 언리얼 콘솔을 사용할 수도 있습니다. 실행 인수 설정 방법은 FAQ 페이지에서 확인할 수 있습니다.

블루프린트에서 로깅하기

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!"));

헤더에서 DECLARE_LOG_CATEGORY_EXTERN 매크로로 로그 범주를 만들 때, 컴파일 시간 상세도(세 번째 인자)를 All로 설정해야 합니다.

범주 이름이 LogYourModReference이고 컴파일 시간 상세도가 All이 아닌 경우, 블루프린트 로깅 호출이 발생할 때 엔진이 All 범주로 로깅 범주를 다시 생성하려고 시도하여, 동일한 로깅 범주에 대해 서로 다른 상세도가 지정되어 게임이 충돌됩니다.

두 번째 인자는 기본 상세도로, SML의 값과 일치할 필요는 없습니다.

블루프린트 로그 범주(LogYourModReference)를 기본 상세도를 SML의 값인 Verbose가 아닌 다른 값으로 재정의하면, 블루프린트 로깅 호출도 필터링됩니다.

대부분의 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 예시

특정 모드의 상세도 변경

엔진 구성 파일을 편집하여 어떤 로그 메시지를 출력할지 필터링할 수 있습니다.

위치: %LocalAppData%/FactoryGame/Saved/Config/Windows/Engine.ini

[Core.Log]
Global=Warning
LogSML=All
LogGame=Verbose
LogExampleMod=BreakOnLog

-LogCmds 실행 인수를 사용할 수도 있지만, 이는 테스트되지 않았습니다.

예시: -LogCmds="global warning, SML all"

로그 파일을 다른 위치로 리디렉션

기본 로그 파일을 다른 위치나 다른 이름으로 저장하고 싶을 수 있습니다.

예를 들어, -LOG="GameLogFileLocationOverride.log"는 로그 파일의 이름을 변경하지만, 여전히 기본 폴더 위치에 저장됩니다.