# ロギング
中級
プログラマー
[Log](xref:Stride.Engine.ScriptComponent.Log) クラスを使うと、ゲームの実行中に、ゲームに関する情報を**ログ**に記録することができます。
自動的に情報を取得する[プロファイリング](profiling.md)とは異なり、独自のログメッセージを作成し、それをいつトリガーするかを決めるのはあなた自身です。例えば、キャラクターが特定のアクションを行ったときにトリガーされるログメッセージを作成することができます。これは、ゲームのパフォーマンスを調査するのに役立ちます。
>[!Note]
>リリースモードでゲームをビルドすると、ログの記録が無効になります。
ロギングを使用し、デバッグモードでゲームを実行すると、Stride は、ロギング情報を表示する 2 つ目のウィンドウでコンソールを開きます。メッセージは、レベルごとに色分けされます。
モジュールの名前(ログメッセージを含むスクリプトなど)が、かっこ内に表示されます。続いてログレベル(**Warning**, **Error** など)、そしてログメッセージが表示されます。

コンソールには、自分のスクリプトだけでなく、すべてのモジュールからのログメッセージが表示されます。例えば、@'Stride.Core.Serialization.Contents.ContentManager' からのメッセージも表示されます。
Visual Studio からゲームを実行した場合、ログメッセージは、代わりに Visual Studio の**出力**ウィンドウに表示されます。

## ログレベル
ログメッセージには 6 つのレベルがあり、重大度に応じて使い分けられます。
| ログレベル | 色 | 説明
|-----------|-------|-----
| Debug | 灰 | 高度なデバッグを目的としたステップバイステップの情報
| Verbose | 白 | 詳細情報
| Info | 緑 | 一般的な情報
| Warning | 黄 | 問題を引き起こすかもしれないマイナーなエラー
| Error | 赤 | エラー
| Fatal | 赤 | ゲームをクラッシュさせる深刻なエラー
既定では、ログは **Info** レベル以上のメッセージを表示します。つまり、既定では **Debug**, **Verbose** のメッセージは表示されません。これを変更するには、後述する **最小レベルの設定** を参照してください。
## ログメッセージを出力する
ログを出力したいコードが含まれるスクリプトで、次のように記述します。
```cs
Log.Debug("My log message");
```
`Debug` の部分を、ログメッセージに使用するレベルで置き換えることができます(先述の **ログレベル** を参照)。
これを `if` 文と組み合わせることで、特定の条件を満たしたときにメッセージをログに残すことができます(後述する **サンプルスクリプト** を参照)。
## ログレベルを設定する
ログに出力する最小のレベルを設定することができます。例えば、**Warning** 以上の厳しいメッセージだけを表示したい場合は、次のようにします。
```cs
Log.ActivateLog(LogMessageType.Warning);
```
>[!Note]
>これはグローバルな設定ではありません。設定したログレベルは、設定したスクリプトでのみ適用されます。
### 実行時にログレベルを変更する
```cs
((Game)Game).ConsoleLogLevel = LogMessageType.myLogLevel;
```
### 特定のログを無効にする
```cs
GlobalLogger.GetLogger("RouterClient").ActivateLog(LogMessageType.Debug, LogMessageType.Fatal, false);
// RouterClient モジュールのロギングを無効化
// Disables logging of the RouterClient module
```
### コンソールでのロギングを無効化する
```cs
((Game)Game).ConsoleLogMode = ConsoleLogMode.None;
```
### ログファイルを作成する
ログ出力をテキストファイルに保存するには、`Start` メソッドに以下のコードを追加します。
```cs
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`)を記録します。
```cs
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("MyTexture");
if (myTexture == null)
{
Log.Error("MyTexture not loaded");
}
else
{
Log.Debug("MyTexture loaded successfully");
}
}
}
}
```
## 関連項目
* [デバッグ テキスト](debug-text.md)
* [プロファイリング](profiling.md)
* [スクリプト](../scripts/index.md)