Formatage de l'affichage des exceptions - Série Console Spectre
Lorsque vous créez une application console .NET, vous devez souvent gérer les exceptions d'une manière qui soit compréhensible à la fois pour les développeurs et les utilisateurs. La sortie de la console peut donner l'impression que les exceptions sont de longues chaînes de données illisibles, en particulier lorsqu'il s'agit de traces de pile et de bibliothèques à forte réflexion. Dans sa vidéo "Formater l'affichage des exceptions - Spectre Console Series", Tim Corey nous explique comment utiliser la bibliothèque Spectre.Console pour faciliter la lecture, l'analyse et la compréhension des exceptions.
Dans cet article, nous allons voir comment Tim gère les exceptions, utilise les commandes et les méthodes de Spectre.Console et applique différents paramètres et styles à l'affichage des exceptions.
Introduction : Pourquoi des exceptions de format ?
Au début de la vidéo, Tim Corey présente Spectre.Console, qu'il décrit comme une bibliothèque qui aide les développeurs à transformer leurs simples applications de console en "applications visuellement attrayantes et informatives" Dans cette leçon particulière, il se concentre sur la façon de gérer les exceptions de manière à rendre leur affichage plus clair et plus lisible.
Tim explique que, par défaut, lorsqu'une exception est levée dans une application console, la sortie de Console.WriteLine(ex) n'est qu'un mur de texte. Elle inclut les chemins d'accès, les traces de pile et les noms de type, le tout sous la forme d'une chaîne continue. La traduction est fonctionnelle, mais pas conviviale.
Pour illustrer son propos, Tim crée un petit exemple :
try
{
throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
try
{
throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Il exécute cette commande dans le terminal et, comme prévu, le résultat est désordonné. Tout se mélange. Tim remarque qu'il est difficile de déterminer ce qui est important : le message, la méthode ou l'emplacement du fichier. Il a donc décidé d'y remédier en utilisant le formatage des exceptions de Spectre.Console.
Utilisation de AnsiConsole.WriteException - La première étape
Pour améliorer l'affichage, Tim remplace la ligne :
Console.WriteLine(ex);
Console.WriteLine(ex);
avec une commande Spectre :
AnsiConsole.WriteException(ex);
AnsiConsole.WriteException(ex);
Cet appel de méthode unique change tout.
Lorsqu'il exécute à nouveau l'application, la sortie dans le terminal est désormais colorisée. Le message apparaît clairement et les sections de trace de pile sont stylisées différemment. Le texte est plus facile à analyser et les valeurs clés ressortent.
Tim souligne que la classe AnsiConsole sert de point d'accès central dans Spectre.Console pour le rendu des sorties stylisées. La méthode WriteException() est spécialement conçue pour gérer les exceptions et les formater automatiquement.
Il ajoute : "C'est déjà un pas en avant" La console met désormais en évidence le message, le chemin d'accès au fichier et le nom de la méthode, ce qui facilite grandement la lecture d'un seul coup d'œil.
Ajouter des options de formatage avec ExceptionFormats
Après avoir montré l'exemple de base, Tim va plus loin en ajoutant des paramètres de formatage pour contrôler quelles parties de l'exception sont affichées et comment elles sont raccourcies.
Il présente l'énumération ExceptionFormats, qui offre plusieurs options telles que ShortenPaths, ShortenTypes, ShortenMethods et ShowLinks. Vous pouvez les utiliser individuellement ou les combiner à l'aide du pipe (|) caractère.
Tim écrit le code suivant :
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
Lorsqu'il exécute cette commande, la sortie de la console devient plus courte et plus concise.
Il explique que :
-
Les chemins d'accès sont raccourcis - au lieu d'afficher le chemin d'accès complet au répertoire, il suffit d'afficher le nom du fichier comme Program.cs.
-
Les types sont raccourcis - au lieu de System.IO.InvalidDataException, vous voyez simplement InvalidDataException.
- Les méthodes sont raccourcies - les longs noms de méthodes génériques sont réduits pour plus de clarté.
Cet exemple montre comment les options de formatage des exceptions de Spectre.Console rendent le résultat plus compact sans perdre les informations essentielles.
Tim souligne que la première version (chemin complet et espaces de noms) contient "essentiellement du bruit", tandis que cette version formatée est plus logique lorsque vous souhaitez simplement voir rapidement la source du problème.
Combinaison de plusieurs formats pour plus de contrôle
Tim ne s'arrête pas là. Il montre comment vous pouvez combinerplusieurs paramètres de formatage à l'aide de l'opérateur pipe :
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
À 3:54, Tim explique l'option ShowLinks. Cela permet à Spectre.Console de rendre les liens de fichiers cliquables ou survolables dans les terminaux compatibles. Dans son exemple, le nom de fichier Program.cs apparaît désormais souligné. Lorsqu'il survole un fichier, le terminal affiche une info-bulle indiquant le chemin d'accès complet du fichier.
Il note que ce comportement dépend de votre environnement - il fonctionne mieux dans les terminaux qui prennent en charge les liens cliquables (comme certains terminaux bash ou VS Code).
En combinant les formats, vous pouvez décider exactement de la quantité d'informations que votre sortie d'exception doit afficher - peut-être voulez-vous des chemins raccourcis mais des noms de types complets, ou voulez-vous cacher complètement les détails des méthodes. Spectre.Console vous offre cette flexibilité.
Aller plus loin avec ExceptionSettings
À ce stade, Tim introduit un nouvel objet appelé ExceptionSettings. Cela vous permet de personnaliser à la fois le formatage et le style des exceptions d'une manière plus avancée.
Il explique qu'au lieu de transmettre une seule valeur de format, vous pouvez transmettre un objet de paramètres complet :
var settings = new ExceptionSettings
{
Format = ExceptionFormats.ShortenEverything,
Style = new ExceptionStyle
{
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
}
};
AnsiConsole.WriteException(ex, settings);
var settings = new ExceptionSettings
{
Format = ExceptionFormats.ShortenEverything,
Style = new ExceptionStyle
{
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
}
};
AnsiConsole.WriteException(ex, settings);
Ici, Tim configure deux propriétés :
-
Format - spécifie comment les informations d'exception doivent être abrégées.
- Style - définit l'aspect des différents éléments de l'exception (tels que les noms de méthodes, les chemins ou les messages).
Spectre.Console fournit un ensemble riche d'options de style telles que les couleurs d'avant-plan, les couleurs d'arrière-plan et les décorations (comme le soulignement, le clignotement, la mise en gras, etc.)
Tim note que vous pouvez également styliser d'autres parties de l'affichage de l'exception, telles que les noms des paramètres, les appels de méthode ou les parenthèses, et pas seulement le message. Cela permet un contrôle très fin de l'aspect de la sortie de l'exception dans l'interface de programmation.
Mise en forme du message d'exception
Pour montrer le fonctionnement de la stylisation, Tim applique un style spécifique à la partie message de l'exception. Il définit la couleur du message en rouge et ajoute un effet de clignotement lent pour le faire ressortir davantage :
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Lorsqu'il lance l'application, le message "Hey, you forgot to give me the data" clignote en rouge dans la fenêtre du terminal.
Tim souligne que cela permet de mettre en évidence l'élément d'information le plus important de la sortie d'exception, à savoir le message lui-même. Le reste du texte (comme le nom du fichier et le numéro de ligne) reste disponible ci-dessous, mais vos yeux sont immédiatement attirés par ce qui n'a pas fonctionné.
Il explique : "Cela attire vraiment l'attention sur l'élément le plus important, à savoir le message lui-même. Et ensuite ils peuvent comprendre, oh, c'est dans main sur Program.cs à la ligne 256"
Cela montre comment Spectre.Console rend non seulement les données lisibles, mais ajoute également de l'emphase et une hiérarchie visuelle pour vous aider à interpréter les résultats plus rapidement.
La série de consoles Spectre s'achève
À la fin de la vidéo, Tim indique qu'il s'agit de la dernière partie de sa série Spectre.Console - du moins pour l'instant. Il encourage les téléspectateurs à faire part de leurs commentaires ou de leurs suggestions pour d'autres sujets à suggestions.iamtimcorey.com.
Il note que tout au long de la série, ils ont couvert une série de fonctionnalités de Spectre : le rendu des tableaux, la gestion des commandes et des arguments CLI, le travail avec du texte structuré, et maintenant le formatage des exceptions.
Tim conclut en disant que cette leçon donne aux développeurs les outils nécessaires pour gérer les exceptions avec élégance, clarté et retour d'information visuel, le tout au sein d'une simple application console .NET.
Conclusion
Grâce à cette démonstration, Tim Corey montre clairement comment rendre les exceptions Spectre.Console plus lisibles, plus informatives et plus attrayantes visuellement. En utilisant seulement quelques lignes de code, les développeurs peuvent :
-
Traitez les exceptions plus efficacement.
-
Formatez la sortie de la console avec des chemins d'accès raccourcis et un texte plus clair.
-
Utilisez les objets ExceptionSettings pour affiner le format et le style.
-
Ajoutez de la couleur et de la décoration pour mettre en évidence les informations importantes.
- Afficher les chemins d'accès aux fichiers sous forme de liens cliquables ou survolables.
Cette approche permet non seulement d'améliorer le débogage, mais aussi de donner aux applications basées sur l'interface de programmation un aspect soigné et professionnel. En combinant des méthodes puissantes comme AnsiConsole.WriteException(), des paramètres personnalisables et de riches options de style, les développeurs peuvent créer des applications de console .NET qui fournissent des sorties d'exception significatives et bien structurées, faciles à analyser et à comprendre - exactement comme Tim Corey le montre dans son excellent exemple.
