La journalisation est un élément essentiel pour le développement, le débogage et la surveillance des applications. Cet article montre comment utiliser le système de journalisation dans une application MAUI.
Installation des Dépendances
Les derniers templates Visual Studio contiennent déjà pour MAUI l'installation des paquets relatifs au système de Log de Microsoft. Normalement les paquets suivants sont installés :
Si ces paquets ne sont pas installés ou que vous ne partez pas du template MAUI, il faudra bien entendu ajouter ces paquets.
Configuration Initiale
Le Template s'occupant de tout, il n'y a rien de spécial à faire. Mais comme nous allons démontrer cela en ajoutant le logger dans la MainPage il faut penser à l'ajouter de la façon suivante :
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
builder.Services.AddTransient<MainPage>();
#if DEBUG
builder.Logging.AddDebug();
#endif
return builder.Build();
}
}
}
Une fois la MainPage enregistrée, le Shell pourra la trouver et chercher le constructeur appelant un paramètre de type ILogger.
Utilisation du Logger avec Niveaux de Journalisation Dynamiques
Pour permettre le passage du niveau de journalisation avec le message, vous pouvez utiliser la méthode Log de l'interface ILogger. Il existe aussi des méthodes directes du logger qui ont l'avantage d'éviter de préciser le niveau de Log et d'être plus facile à lire (puisque le niveau se trouve dans le nom de la méthode). En partant du template de base de MAUI, voici le code avec Log de MainPage.cs :
public partial class MainPage : ContentPage
{
int count = 0;
private ILogger<MainPage> logger;
public MainPage(ILogger<MainPage> _logger)
{
logger = _logger;
InitializeComponent();
}
private void OnCounterClicked(object sender, EventArgs e)
{
logger.Log(LogLevel.Information,"Counter clicked");
// ou bien : logger.LogInformation("Counter clicked");
count++;
if (count == 1)
CounterBtn.Text = $"Clicked {count} time";
else
CounterBtn.Text = $"Clicked {count} times";
SemanticScreenReader.Announce(CounterBtn.Text);
}
}
Le résultat
La capture ci-dessous montre un morceau de l'application (sous Windows), le bouton a été cliqué deux fois, et dans la fenêtre de Sortie de Visual Studio (en bas à gauche), on peut lire les deux lignes de Log de niveau Information qui ont été produites.
Cela fonctionne donc parfaitement et pour ainsi dire sans code !
Conclusion
MAUI sait presque tout faire par défaut… Dont les Logs, au moins sur la console de sortie ce qui est très pratique. Il existe toutefois des limites à ce système de Log, l'écriture sur disque n'est pas prise en charge. C'est un peu limitatif tant il est vrai qu'en exploitation on a souvent besoin de véritables fichiers de Logs facile à exploiter en cas de problème. Il existe bien des moyens de configurer le logger pour créer des entrées dans le journal Windows de l'App, mais sous MAUI on peut avoir besoin de plus souple (surtout hors Windows).
Toutefois cela sort du cadre des Logs de debug offerts de base par MAUI. Au-delà, et la question des Logs n'étant pas triviale (par exemple comment s'assurer que les écritures disques sont thread safe et non bloquantes), il est bien préférable de choisir un véritable système de Log complet et éprouvé. Je vous conseille d'utiliser SeriLog qui est très bien fait, pas trop complexe mais entièrement paramétrable. De même, sur des systèmes sandboxés comme sous Android ou iOS, il faudra prévoir l'envoi des Logs sous forme de Partage ou de Mails, ce qui est encore une autre histoire. Peut-être pour un autre billet !
Stay Tuned !
Le Guide Complet de.NET MAUI ! Lien direct Amazon : https://amzn.eu/d/95wBULD
Près de 500 pages dédiées à l'univers .NET MAUI !
Existe aussi en version Kindle à prix réduit !