環境
UE 4.10.0
Visual Studio 2015
概要
Unreal Engine 4 を触ってみて動作を確認する
今回はログ出力の方法を確認
本文
準備
エディタの [ウィンドウ] -> [デベロッパーツール] -> [アウトプットログ] を選択し
ログの表示を有効化しておく
適当にログを出力してみる
適当なアクターを作成し Tick の中にログ出力を組み込んでみる
以下、そのままで動くサンプル
[コード]
void AMyActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
UE_LOG(LogTemp, Warning, TEXT("output : %s"), L"ログの内容");
}
[出力]
LogTemp:Warning: output : ログの内容
注意点は、ログの出力文字列を TEXT マクロで囲う事と、文字列を引数に取る場合で文字列
リテラルを指定する場合は L"~" にする事
ログカテゴリ
UE_LOG マクロの第一引数の LogTemp はエンジンが定義しているデフォルトのログカテゴリで、
ログを出力する際にカテゴリが一緒に出力される。これによって、ゲーム実行時に記録したログ
からデータを抽出するのに役立てる。
UE4 では、このログカテゴリをユーザーが拡張できるようになっている。
拡張方法は、以下の 2 種類あるようだ
一つの cpp 内でのみログカテゴリを追加する場合
DEFINE_LOG_CATEGORY_STATIC マクロを使用して cpp にログカテゴリを追加する
STATIC の名前の通りヘッダではなく cpp に追加する事
他のプログラマが使う必要が無いローカルな定義をしたい場合や、他のプログラマに
使用して欲しくないカテゴリを定義したい場合などはこちらを使用する
[コード]
DEFINE_LOG_CATEGORY_STATIC(NewLogCategoryName, Warning, All);
void AMyActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
UE_LOG(NewLogCategoryName, Warning, TEXT("output : %s"), L"ログの内容");
}
[出力]
NewLogCategoryName:Warning: output : ログの内容
複数の cpp で共有するログカテゴリを追加する場合
1.DECLARE_LOG_CATEGORY_EXTERN マクロでヘッダに、ログカテゴリを宣言
2.DEFINE_LOG_CATEGORY マクロで cpp に、ログカテゴリを定義
こちらは、アプリケーション全体(でなくても良いが)で共有して使用したいログカテゴリを
追加する場合の手順となる
[ヘッダ]
DECLARE_LOG_CATEGORY_EXTERN(NewLogCategoryNameGlobal, Warning, All);
[コード]
DEFINE_LOG_CATEGORY(NewLogCategoryNameGlobal);
void AMyActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
UE_LOG(NewLogCategoryNameGlobal, Warning, TEXT("output : %s"), L"ログの内容");
}
[出力]
NewLogCategoryNameGlobal:Warning: output : ログの内容
ログレベル
UE_LOG マクロの第二引数の Warning はエンジンが定義しているログレベル
OutputDevice.h のネームスペース ELogVerbosity 名前空間に定義されている列挙体で以下の
定義がある。
enum Type
{
NoLogging,
Fatal,
Error,
Warning,
Display,
Log,
Verbose,
VeryVerbose,
};
致命的なエラーや、エラー、警告など、一般的なゲームライブラリやゲームエンジンにある
定義とほぼ同じものが用意されている。ログレベルによって、出力されるログのカラーが
異なるので、うまく使い分ければログが見やすくなる。
Error は赤、Warning は黄色、Display は灰色でログが出力される
また Fatal を指定すると、その時点でプログラムがクラッシュしてクラッシュレポートの
送信ダイアログが出てくるようだ。
まとめ
UE4 では、ログカテゴリをユーザーが自由に拡張できるようになっている。
ローカル拡張も、グローバル拡張もどちらも可能なのでかなり柔軟にログ出力できるように
なっていて、かなり使い勝手が良い。