この記事でのバージョン
Unity 2018.4.19f1
はじめに
UnityのConsoleには様々なログが表示されます。
Debug.Log("普通のログ"); Debug.LogWarning("警告"); Debug.LogError("エラー"); Debug.Assert(false, "アサート"); try { int a = 1, b = 0; var c = a / b; } catch (Exception e){ Debug.LogException(e, this); }
![]() |
今回はこのログをプログラムで取得してみようという感じの記事です。
なお、上記のように自分で表示ログだけでなく、Unityが自動で表示したログも取得可能です。
Application.logMessageReceived
Unityでログを取得したい時にはApplicationのlogMessageReceivedを使います。
ログメッセージが発行されたときに受信するためのイベントハンドラー
使い方は簡単、logMessageReceivedにデリゲートを設定するだけ。
//ログが発行された時にOnReceiveLogが実行されるように
Application.logMessageReceived += OnReceiveLog;
//ログを受け取った //logText : ログの内容 //stackTrace : ログがどこから発行されたか //logType : ログの種類 private void OnReceiveLog(string logText, string stackTrace, LogType logType) { }
例えば発行されたログを表示するウィンドウを作ってみると以下のような感じ。
using System; using System.Text; using UnityEditor; using UnityEngine; /// <summary> /// 発行されたログを表示するウィンドウ /// </summary> public class LogWindow : EditorWindow { private StringBuilder _stringBuilder; //================================================================================= //初期化 //================================================================================= //メニューからウィンドウを表示 [MenuItem("Tools/Open/LogWindow")] public static void Open (){ LogWindow.GetWindow (typeof(LogWindow)); } //ウィンドウを開いた時に実行される(表示するパーツの設定用) private void OnEnable (){ Application.logMessageReceived += OnReceiveLog; _stringBuilder = new StringBuilder(); _stringBuilder.Append($"ログ一覧"); } //================================================================================= //ログ取得 //================================================================================= //ログを受け取った private void OnReceiveLog(string logText, string stackTrace, LogType logType) { _stringBuilder.Append($"\n================\nlogText\n{logText}\n\nLogType\n{logType}\n\nstackTrace\n{stackTrace}"); } //================================================================================= //表示するGUIの設定 //================================================================================= private void OnGUI(){ if (GUILayout.Button("ログ追加ボタン")) { Debug.Log("普通のログ"); Debug.LogWarning("警告"); Debug.LogError("エラー"); Debug.Assert(false, "アサート"); try { int a = 1, b = 0; var c = a / b; } catch (Exception e) { Debug.LogException(e, this); } } EditorGUILayout.TextArea(_stringBuilder.ToString()); } }
![]() |
他にもlogMessageReceivedを使えば、VR上でログを表示するなんて事も出来ちゃったりします。
![]() |