【UE5】UE_LOGの基本的な使い方

今回はログを出力する UE_LOG マクロの基本的な使い方を紹介したいと思います。

UE_LOGのパラメータについて

UE_LOGには主に3つのパラメータを指定します

  1. カテゴリ
  2. 詳細レベル (Verbosity)
  3. テキスト

例えば以下のUE_LOGは、カテゴリは「LogTemp」詳細レベルは「Error」、テキストは「エラーです」というメッセージとなります。

UE_LOG(LogTemp, Error, TEXT("エラーです"));

それぞれの簡単な説明としては、以下のとおりです。

パラメータ説明
カテゴリログのグループ。標準で用意されているものとしては、
汎用ログである “LogTemp”、
ネットワークの “LogNet” などがあります。
LogTemp:汎用・一時ログ
・LogInit / LogExit:起動・終了
・LogEngine / LogCore:エンジン基盤
・LogActor / LogBlueprint / LogAnimation / LogPhysics:ゲームプレイ系
LogRenderer / LogSlate / LogUMG / LogShaderCompilers:レンダリング・UI系
・LogAI / LogNet / LogAudio:AI・ネットワーク・オーディオ系
詳細レベルログの重要度や詳細度の分類で、
用途によって7段階用意されています
・致命的:Fatal
・エラー/警告/情報:Error, Warning, Display
・ログ:Log
・冗長:Verbose, VeryVerbose
テキストログに出力するテキストです

ログの詳細レベル (Verbosity) について

UE_LOG の詳細レベル(Verbosity) は「ログの重要度・粒度」を指定する仕組みです。

この指定によって出力される情報量を制御することできます。

Information

※ Verbose / VeryVerbose は ログフィルタ設定を変更しない限り表示されません
開発者の不具合調査にのみ利用するログにしておくと良いです

それぞれの違いを確認するためにテストコード書いて実行してみます。

ACPP_LogTest::ACPP_LogTest()
{
  UE_LOG(LogTemp, VeryVerbose, TEXT("Very Verbose"));
  UE_LOG(LogTemp, Verbose, TEXT("Verbose"));
  UE_LOG(LogTemp, Log, TEXT("Log"));
  UE_LOG(LogTemp, Display, TEXT("Display"));
  UE_LOG(LogTemp, Warning, TEXT("Warning"));
  UE_LOG(LogTemp, Error, TEXT("Error"));
  UE_LOG(LogTemp, Fatal, TEXT("Fata Error"));
}

これを実行すると以下のようなログとなりました。

そして “Fatal” ではブレークが入ります。

ただし完全に停止するわけではなく、続行ボタンをクリックすると処理を続行できます。

Verbose / VeryVerboseを表示する方法

Verbose / VeryVerboseはログフィルタを変更すると表示されます。

例えば以下のUE_LOGをログに表示したいとします。

UE_LOG(LogTemp, Verbose, TEXT("Verbose"));

「出力ログ」などを開いて「log LogTemp Verbose」と入力してEnterキーを押します。

すると以下のようにUE_LOGが出力されます。

LogTemp: Verbose: Verbose

Unrealエディタのログ出力設定を変更する

フィルタ設定

出力ログから「フィルタ」を選ぶと「メッセージ・警告・エラー」のカテゴリで絞り込みが可能です。

例えば “エラー” 以外を「None (なし)」にすると、エラーメッセージのみに表示を絞り込むことができます。

また「カテゴリ」から出力するカテゴリを設定できますが、数が大量にあるためこれを手動で設定するのは大変です。

DefaultEngine.iniで設定する

そこで通常はDefaultEngine.ini で出力設定を行います。

DefaultEngne.ini は Configフォルダにあります。

DefaultEngine.ini に「カテゴリ=None」の記述をするとカテゴリフィルターに表示されなくなります。

[Core.Log]
LogNetTraffic=None # 通信のログを無効.

ただ、カテゴリは大量にあるため1つずつ無効化していくのは大変です。そこで「Global=NoLogging」を指定してすべてを無効化し、必要に応じてカテゴリを追加する方法を使います。

[Core.Log]
; まずグローバル設定で全カテゴリを無効化
Global=NoLogging

; 🔹 残したいカテゴリを個別に設定
LogTemp=Verbose
LogInit=Warning
LogConfig=Warning
LogGarbage=Warning
LogMemory=Warning
LogPhysics=Warning
LogAudio=Warning

これによりカテゴリフィルターを最小限に減らせました。

Information

カテゴリを無効化するだけでなく、”log” コマンドで設定する「ログの詳細レベル (WarningやVerboseなど)」も DefaultEngine.ini で設定可能です。

新しいカテゴリを追加する

UE_LOGでログを出力する際、常に “LogTemp” カテゴリを使用すると、大量のログが出力されてしまい目的のログを探すのが大変となります。

そこで機能に合わせたカテゴリを別途用意します。

カテゴリの追加方法

カテゴリの追加は C++ で定義する必要があります。(エディタ側では設定できません)

例えば “CPP_Logger.h” に以下のように定義します。

#pragma once

#include "CoreMinimal.h"

// 敵カテゴリの宣言.
DECLARE_LOG_CATEGORY_EXTERN(LogEnemy, Log, All);

// 使いやすくるためのマクロ.
// ・通常ログ.
#define ENEMY_LOG(Format, ...) \
{ \
  UE_LOG(LogEnemy, Log, TEXT("%s:%d: " Format), TEXT(__FILE__), __LINE__, ##__VA_ARGS__); \
}

// ・警告ログ.
#define ENEMY_WARNING(Format, ...) \
{ \
  UE_LOG(LogEnemy, Warning, TEXT("%s:%d: " Format), TEXT(__FILE__), __LINE__, ##__VA_ARGS__); \
}

// ・エラーログ.
#define ENEMY_ERROR(Format, ...) \
{ \
  UE_LOG(LogEnemy, Error, TEXT("%s:%d: " Format), TEXT(__FILE__), __LINE__, ##__VA_ARGS__); \
}

DECLARE_LOG_CATEGORY_EXTERN() マクロでカテゴリを定義します。

DECLARE_LOG_CATEGORY_EXTERNマクロの説明

第1引数: カテゴリを指定します。上記コードでは LogEnemy カテゴリを定義しています
第2引数: デフォルトの詳細レベル。上記コードの指定はLog以上を出力します。NoLogging を指定すると、初期状態ではログ出力されなくなります
第3引数: コンパイルに含める詳細レベル。"All" を指定すると詳細レベルを変更することでどのレベルでもログ出力できます

それ以降の行はログを使いやすくするためのマクロです。

そして cppファイルには以下のように定義します。

#include "CPP_Logger.h"

// 敵カテゴリの定義.
DEFINE_LOG_CATEGORY(LogEnemy);

追加したカテゴリの使い方

新しく定義したマクロをそのまま使ってログを出力します。

#include "CPP_Logger.h"

void ACPP_LogTest::BeginPlay()
{
  Super::BeginPlay();

  ENEMY_LOG("敵の通常ログ");
  ENEMY_WARNING("敵の警告ログ");
  ENEMY_ERROR("敵のエラーログ");
}
Information

ログにマルチバイト文字を含める場合は、コードをUTF-8で保存する必要があります。(Shift-JISだと文字化けします)

また、DefaultEngine.iniでカテゴリを絞り込んでいる場合は追加が必要となります。

[Core.Log]
; まずグローバル設定で全カテゴリを無効化
Global=NoLogging

; 🔹 残したいカテゴリを個別に設定
LogTemp=Verbose
LogInit=Warning
LogConfig=Warning
LogGarbage=Warning
LogMemory=Warning
LogPhysics=Warning
LogAudio=Warning
LogEnemy=Verbose ; ←この追加が必要.

動作確認

実行して動作確認をします。

なお新しく追加したカテゴリはフィルターで無効化することもできます。

おしまい

以上、UE_LOGの基本的な使い方でした。

ログは開発時やデバッグの重要な情報となりますので、ご活用いただけると幸いです。

\ 最新情報をチェック /