Table of Contents

ロギング

中級 プログラマー

Log クラスを使うと、ゲームの実行中に、ゲームに関する情報をログに記録することができます。

自動的に情報を取得するプロファイリングとは異なり、独自のログメッセージを作成し、それをいつトリガーするかを決めるのはあなた自身です。例えば、キャラクターが特定のアクションを行ったときにトリガーされるログメッセージを作成することができます。これは、ゲームのパフォーマンスを調査するのに役立ちます。

Note

リリースモードでゲームをビルドすると、ログの記録が無効になります。

ロギングを使用し、デバッグモードでゲームを実行すると、Stride は、ロギング情報を表示する 2 つ目のウィンドウでコンソールを開きます。メッセージは、レベルごとに色分けされます。 モジュールの名前(ログメッセージを含むスクリプトなど)が、かっこ内に表示されます。続いてログレベル(Warning, Error など)、そしてログメッセージが表示されます。

Logging in console

コンソールには、自分のスクリプトだけでなく、すべてのモジュールからのログメッセージが表示されます。例えば、ContentManager からのメッセージも表示されます。

Visual Studio からゲームを実行した場合、ログメッセージは、代わりに Visual Studio の出力ウィンドウに表示されます。

Log output window

ログレベル

ログメッセージには 6 つのレベルがあり、重大度に応じて使い分けられます。

ログレベル 説明
Debug 高度なデバッグを目的としたステップバイステップの情報
Verbose 詳細情報
Info 一般的な情報
Warning 問題を引き起こすかもしれないマイナーなエラー
Error エラー
Fatal ゲームをクラッシュさせる深刻なエラー

既定では、ログは Info レベル以上のメッセージを表示します。つまり、既定では Debug, Verbose のメッセージは表示されません。これを変更するには、後述する 最小レベルの設定 を参照してください。

ログメッセージを出力する

ログを出力したいコードが含まれるスクリプトで、次のように記述します。

Log.Debug("My log message");

Debug の部分を、ログメッセージに使用するレベルで置き換えることができます(先述の ログレベル を参照)。

これを if 文と組み合わせることで、特定の条件を満たしたときにメッセージをログに残すことができます(後述する サンプルスクリプト を参照)。

ログレベルを設定する

ログに出力する最小のレベルを設定することができます。例えば、Warning 以上の厳しいメッセージだけを表示したい場合は、次のようにします。

Log.ActivateLog(LogMessageType.Warning);
Note

これはグローバルな設定ではありません。設定したログレベルは、設定したスクリプトでのみ適用されます。

実行時にログレベルを変更する

((Game)Game).ConsoleLogLevel = LogMessageType.myLogLevel;

特定のログを無効にする

GlobalLogger.GetLogger("RouterClient").ActivateLog(LogMessageType.Debug, LogMessageType.Fatal, false); 
// RouterClient モジュールのロギングを無効化
// Disables logging of the RouterClient module

コンソールでのロギングを無効化する

((Game)Game).ConsoleLogMode = ConsoleLogMode.None;

ログファイルを作成する

ログ出力をテキストファイルに保存するには、Start メソッドに以下のコードを追加します。

var fileWriter = new TextWriterLogListener(new FileStream("myLogFile.txt", FileMode.Create));
GlobalLogger.GlobalMessageLogged += fileWriter;

これにより、プロジェクトの Debug フォルダにファイルが作成されます。(例:MyGame\MyGame\Bin\Windows\Debug\myLogFile.txt

サンプルスクリプト

次のスクリプトは、MyTexture テクスチャーが読み込まれたかどうかを確認する例です。 テクスチャーが読み込まれたとき、ログはデバッグメッセージ(Log.Error)を表示します。 読み込まれなかったときは、ログはエラーメッセージ(Log.Debug)を記録します。

using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Stride.Core.Diagnostics;
using Stride.Core.Mathematics;
using Stride.Input;
using Stride.Engine;
using Stride.Graphics;

namespace MyGame
{
    public class Script : SyncScript
    {
		public Texture myTexture;

        public override void Start()
        {
            // Initialization of the script.
            Log.ActivateLog(LogMessageType.Debug);
            Log.Debug("Start loading MyTexture");

            myTexture = Content.Load<Texture>("MyTexture");
            if (myTexture == null)
            {
                Log.Error("MyTexture not loaded");
            }
            else
            {
                Log.Debug("MyTexture loaded successfully");
            }
        }
    }
}

関連項目