# Logging
Intermediate
Programmer
You can **log** information about your game while it runs using [Log](xref:Stride.Engine.ScriptComponent.Log).
Unlike [profiling](profiling.md), which retrieves information automatically, it's up to you to create your own log messages and define when they're triggered. For example, you can create a log message that triggers when a character performs a certain action. This is useful to investigate how your game is performing.
>[!Note]
>Logging is disabled when you build the game in release mode.
When you use logging and run your game in debug mode, Stride opens a console in a second window to display logging information. The messages are color-coded by level.
The name of the module (such as the script containing the log message) is displayed in brackets. This is followed by the log level (eg **Warning**, **Error**, etc), then the log message.

The console displays log messages from all modules, not just your own scripts. For example, it also displays messages from the @'Stride.Core.Serialization.Contents.ContentManager'.
If you run your game from Visual Studio, log messages are shown in the Visual Studio **Output** window instead.

## Log levels
There are six levels of log message, used for different levels of severity.
| Log level | Color | Description
|-----------|-------|-----
| Debug | Gray | Step-by-step information for advanced debugging purposes
| Verbose | White | Detailed information
| Info | Green | General information
| Warning | Yellow | Minor errors that might cause problems
| Error | Red |Errors
| Fatal | Red | Serious errors that crash the game
By default, the log displays messages for the level **Info** and higher. This means it doesn't display **Debug** or **Verbose** messages. To change this, see **Set the minimum level** below.
## Write a log message
In the script containing code you want to log, write:
```cs
Log.Debug("My log message");
```
You can replace `Debug` with the level you want to use for the log message (see **Log levels** above).
You can combine this with `if` statements to log this message under certain conditions (see **Example script** below).
## Set the log level
You can set a minimum log level to display. For example, if you only want to see messages as severe as **Warning** or higher, use:
```cs
Log.ActivateLog(LogMessageType.Warning);
```
>[!Note]
>This isn't a global setting. The log level you set only applies to the script you set it in.
### Change the log level at runtime
```cs
((Game)Game).ConsoleLogLevel = LogMessageType.myLogLevel;
```
### Disable a specific log
```cs
GlobalLogger.GetLogger("RouterClient").ActivateLog(LogMessageType.Debug, LogMessageType.Fatal, false);
// Disables logging of the RouterClient module
```
### Disable logging in the console
```cs
((Game)Game).ConsoleLogMode = ConsoleLogMode.None;
```
### Create a log file
To save the log output to a text file, add this code to the `Start` method:
```cs
var fileWriter = new TextWriterLogListener(new FileStream("myLogFile.txt", FileMode.Create));
GlobalLogger.GlobalMessageLogged += fileWriter;
```
This creates a file in the Debug folder of your project (eg *MyGame\MyGame\Bin\Windows\Debug\myLogFile.txt*).
## Example script
The following script checks that the texture `MyTexture` is loaded. When the texture loads, the log displays a debug message (`Log.Debug`). If it doesn't load, the log records an error message (`Log.Error`).
```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");
}
}
}
}
```
## See also
* [Debug text](debug-text.md)
* [Profiling](profiling.md)
* [Scripts](../scripts/index.md)