UE4: クラスファイルにたいてい仕込むログマクロの糖衣マクロ
UE4 に C++ コードファイルを追加する場合、特に UCLASS
では規模がよほど小さくない限りたいてい定義するログマクロの定義と糖衣を紹介。
// MyHoge.h // コンパイラーオプションで MYHOGE_ENABLE_LOG=1 など明示的に渡されない場合でも // デバッグビルドの場合にはログマクロを ON にする #if defined( UE_BUILD_DEBUG ) && ! defined( MYHOGE_ENABLE_LOG) #define MYHOGE_ENABLE_LOG 1 #endif // ログマクロを有効にする場合 #if MYHOGE_ENABLE_LOG > 0 /// ログONの場合のログマクロラッパー定義 DECLARE_LOG_CATEGORY_EXTERN( MYHOGE, Log, All ); #endif
// .cpp // ログマクロを有効にする場合 #if MYHOGE_ENABLE_LOG > 0 // ログカテゴリー定義 DEFINE_LOG_CATEGORY( MYHOGE ); // このソース内でのみ有効なログマクロ書き糖衣マクロ #ifndef LOG #define LOG( LEVEL, BODY, ... ) \ { UE_LOG( MYHOGE, LEVEL, TEXT( BODY ), __VA_ARGS__ ) } #endif // ログOFFの場合のログマクロラッパー定義 #else #ifndef LOG #define LOG( ... ) #endif #endif
この仕込みを施したならば、 .cpp でログを仕込む際には LOG( "hoge %s %f", *something_string, something_float )
と書くだけでよい。UE_LOG
を {
}
でブロックスコープにしてあるので、 if ( x ) LOG( "hoge" )
のように使っても翻訳に支障もない。MYHOGE_ENABLE_LOG
を明示的に制御したい場合は "{your-project-name}.Build.cs に Definitions
で Add
すればよい。