【UE5】UE_LOGの基本的な使い方
今回はログを出力する UE_LOG マクロの基本的な使い方を紹介したいと思います。
UE_LOGのパラメータについて
UE_LOGには主に3つのパラメータを指定します
- カテゴリ
- 詳細レベル (Verbosity)
- テキスト
例えば以下の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) は「ログの重要度・粒度」を指定する仕組みです。
この指定によって出力される情報量を制御することできます。

それぞれの違いを確認するためにテストコード書いて実行してみます。
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: VerboseUnrealエディタのログ出力設定を変更する
フィルタ設定
出力ログから「フィルタ」を選ぶと「メッセージ・警告・エラー」のカテゴリで絞り込みが可能です。

例えば “エラー” 以外を「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これによりカテゴリフィルターを最小限に減らせました。

新しいカテゴリを追加する
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() マクロでカテゴリを定義します。
それ以降の行はログを使いやすくするためのマクロです。
そして 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("敵のエラーログ");
}また、DefaultEngine.iniでカテゴリを絞り込んでいる場合は追加が必要となります。
[Core.Log]
; まずグローバル設定で全カテゴリを無効化
Global=NoLogging
; 🔹 残したいカテゴリを個別に設定
LogTemp=Verbose
LogInit=Warning
LogConfig=Warning
LogGarbage=Warning
LogMemory=Warning
LogPhysics=Warning
LogAudio=Warning
LogEnemy=Verbose ; ←この追加が必要.動作確認
実行して動作確認をします。

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

おしまい
以上、UE_LOGの基本的な使い方でした。
ログは開発時やデバッグの重要な情報となりますので、ご活用いただけると幸いです。

