UE_LOGFMTによって出力した構造化ログをjsonファイルに出力することは可能ですか?
UATのログは
Engine\Programs\AutomationTool\Saved\Logs\
以下にtxtとjson両方出ていますが
同様に
プロジェクト\Saved\Logs
以下のUEエディタのログを.logだけでなく.jsonで出力すことは可能ですか?
<br/>
また、その際UE_LOGFMTで出力した名前の付いた値をjsonのname,valueに入れることは可能ですか?
<br/>
例)
UE_LOGFMT(LogCore, Warning, “Loading `{Name}` failed with error `{Error}`”,(“Name”, Package->GetName()), (“Error”, ErrorCode),(“Flags”, LoadFlags));
であれば
{
"category: “LogCore”,
“type”: “Warning”,
“message”: “Loading `Nameの値` failed with error `Errorの値`”,
"Name: “Nameの値”,
"Error: “Errorの値”,
“Flags”: “Flagsの値”
}
のように出力されてほしいのですが可能でしょうか?
<br/>
<br/>
t-nikaido1
(t-nikaido1)
2
お世話になっております。
UAT などで使用されているログ出力については C# で実装されたもので、ゲームコードからは利用できません(Log.cs / LogEvent.cs / JsonLogEvent.cs あたりをご覧下さい)。
UE_LOG / UE_LOGFMT を受けての出力を追加するには目的に応じた OutputDevice を用意し
GLog->AddOutputDevice(MyOutputDevice);
のようにできます(エンジンのコードに幾つかの例があります)。
json ファイルへ出力するための OutputDevice は用意されていませんので自前で実装していただく必要があります。
ファイルへの出力を行う FOutputDeviceFile をベースに幾つかの関数をオーバーライドするのが早いかもしれません。
特に、UE_LOGFMT において使用される
virtual void SerializeRecord(const UE::FLogRecord& Record) override;
に主な実装を記述することになるかと思います。
ここで Record.GetFields() として name, value を格納した構造体にアクセスできます。
よろしくお願いいたします。