UnrealEngineのshippingビルドでログを出す方法をメモしておきます。
UE4.26.2、UE5.3.2で確認しています。
ログを出す方法
- Engineをソースコードビルドしてプロジェクトに適用する
- [プロジェクト名].Target.csに以下を追加する
if (Configuration == UnrealTargetConfiguration.Shipping)
{
BuildEnvironment = TargetBuildEnvironment.Unique; // UE5.3.2では不要
bUseLoggingInShipping = true;
}
- ビルドしたexeを実行するときに-logオプションをつける
- => コマンドプロンプトが新たに起動してログが出力される
ビルド時のコマンドライン引数でログ出しを制御する方法
[UE5] パッケージビルド時のコマンドライン引数で .Target.cs の処理を分岐する|株式会社ヒストリア
参照サイト
ue4 shipping (exe version) output log log - Programmer Soughtなど
ログをファイルに出力する方法
以下のようなオプションをつけてビルドしたexeを実行する。
LOG=[出力したいログファイル名]
ログは以下のようなフォルダに出力され、ローテートされる。
C:\Users\[ユーザ名]\AppData\Local\[プロジェクト名]\Saved\Logs
参照サイト
コマンドライン引数 | Unreal Engine 4.27 ドキュメント
ログのローテーション
BaseEngine.iniでは以下のような設定になっていてプロジェクトのDefaultEngine.iniで設定を上書き可能
Engine/Config/BaseEngine.ini
[LogFiles]
PurgeLogsDays=5 # => 5日より前のログは削除
MaxLogFilesOnDisk=10 => 過去ログは最大10個まで
LogTimes=True # => ログ出力と合わせて時間をプリント
BlueprintのPrintStringの内容をログに出す方法
UE4.26.2ではそのままではBlueprintのPrintStringの内容がログには出てこない。
出力するためには以下のようにEngine側のコードを変更してビルドする必要がある。
※ #if、#endifをコメントアウトするとビルドでエラーになったのでこの修正方法にした。
Engine/Source/Runtime/Engine/Private/KismetSystemLibrary.cpp
void UKismetSystemLibrary::PrintString(const UObject* WorldContextObject, const FString& InString, bool bPrintToScreen, bool bPrintToLog, FLinearColor TextColor, float Duration)
{
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) // Do not Print in Shipping or Test
...
#else // <= ====== 追加 ======
UE_LOG(LogBlueprintUserMessages, Log, TEXT("%s"), *InString); // <= ====== 追加 ======
#endif