Saltar al pie de página
Iron Academy Logo
Aplicación C#
Aplicación C#

Otras categorías

Formateo de la pantalla de excepciones - Consola de la serie Spectre

Tim Corey
8m 51s

Al crear una aplicación de consola .NET, a menudo hay que gestionar las excepciones de forma que tengan sentido tanto para los desarrolladores como para los usuarios. La salida de consola sin formato puede hacer que las excepciones parezcan largas e ilegibles cadenas de datos, especialmente cuando se trata de trazas de pila y bibliotecas con mucha reflexión. En su vídeo "Formatting Exception Display - Spectre Console Series", Tim Corey nos enseña a utilizar la biblioteca Spectre.Console para que las excepciones sean más fáciles de leer, analizar y comprender.

En este artículo, exploraremos cómo Tim maneja las excepciones, utiliza comandos y métodos de Spectre.Console y aplica diferentes configuraciones y estilos a la visualización de excepciones.

Introducción: ¿Por qué las excepciones de formato?

Al principio del vídeo, Tim Corey presenta Spectre.Console, describiéndola como una biblioteca que ayuda a los desarrolladores a convertir sus sencillas aplicaciones de consola en "aplicaciones visualmente atractivas e informativas" En esta lección en particular, se centra en cómo manejar excepciones de forma que su visualización sea más clara y legible.

Tim explica que, por defecto, cuando se lanza una excepción en una aplicación de consola, la salida que se obtiene de Console.WriteLine(ex) es sólo un muro de texto. Incluye rutas, stack traces y nombres de tipos, todo ello como una cadena continua. Es funcional, pero no amigable.

Para demostrarlo, Tim crea un pequeño ejemplo:

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);
}

Ejecuta este comando en el terminal y, como era de esperar, el resultado es desordenado. Todo se mezcla. Tim señala que es difícil distinguir lo que importa: el mensaje, el método o la ubicación del archivo. Así que se propone solucionarlo utilizando el formato de excepciones Spectre.Console.

Usando AnsiConsole.WriteException - El Primer Paso

Para mejorar la visualización, Tim sustituye la línea:

Console.WriteLine(ex);
Console.WriteLine(ex);

con un comando Spectre:

AnsiConsole.WriteException(ex);
AnsiConsole.WriteException(ex);

Esta única llamada a un método lo cambia todo.

Cuando ejecuta la aplicación de nuevo, la salida en el terminal está ahora coloreada. El mensaje aparece con claridad y las secciones de seguimiento de pila tienen un estilo diferente. El texto es más fácil de analizar y los valores clave destacan.

Tim señala que la clase AnsiConsole actúa como punto de acceso central en Spectre.Console para renderizar la salida con estilo. El método WriteException() está diseñado específicamente para gestionar excepciones y darles formato automáticamente.

Y añade: "Eso ya es un paso adelante" La consola resalta ahora el mensaje, la ruta del archivo y el nombre del método, lo que facilita mucho la lectura de un vistazo.

Añadir opciones de formato con ExceptionFormats

Tras mostrar el ejemplo básico, Tim da un paso más añadiendo parámetros de formato para controlar qué partes de la excepción se muestran y cómo se acortan.

Presenta la enumeración ExceptionFormats, que ofrece varias opciones como ShortenPaths, ShortenTypes, ShortenMethods y ShowLinks. Puede utilizarlas individualmente o combinarlas mediante la tubería (|) carácter.

Tim escribe el siguiente código:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);

Cuando ejecuta este comando, la salida de la consola se vuelve más corta y concisa.

Explica que:

  • Las rutas se acortan: en lugar de mostrar la ruta completa del directorio, solo se muestra el nombre del archivo, como Program.cs.

  • Los tipos se acortan - en lugar de System.IO.InvalidDataException, simplemente se ve InvalidDataException.

  • Los métodos se acortan: los nombres de métodos genéricos largos se recortan para mayor claridad.

Este ejemplo muestra cómo las opciones de formato de excepciones de Spectre.Console hacen que el resultado sea más compacto sin perder información esencial.

Tim subraya que la primera versión (ruta completa y espacios de nombres) contiene "sobre todo ruido", mientras que esta versión formateada tiene más sentido cuando sólo se quiere ver rápidamente el origen del problema.

Combinación de varios formatos para un mayor control

Tim no se detiene ahí. Demuestra cómo se pueden combinar múltiples configuraciones de formato utilizando el operador pipe:

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);

En 3:54, Tim explica la opción ShowLinks. Esto permite a Spectre.Console mostrar enlaces a archivos sobre los que se puede hacer clic o pasar el ratón en terminales compatibles. En su ejemplo, el nombre de archivo Program.cs aparece ahora subrayado. Al pasar el ratón por encima, el terminal muestra un tooltip con la ruta completa del archivo.

Señala que este comportamiento depende del entorno: funciona mejor en terminales que admiten enlaces en los que se puede hacer clic (como algunos terminales bash o VS Code).

Al combinar formatos, puede decidir exactamente cuánta información debe mostrar su salida de excepciones: tal vez desee rutas abreviadas pero nombres de tipo completos, o desee ocultar por completo los detalles de los métodos. Spectre.Console le ofrece esa flexibilidad.

En profundidad con ExceptionSettings

En este punto, Tim introduce un nuevo objeto llamado ExceptionSettings. Esto permite personalizar tanto el formato como el estilo de las excepciones de forma conjunta y más avanzada.

Explica que, en lugar de pasar un único valor de formato, se puede pasar un objeto de configuración completo:

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);

Aquí, Tim configura dos propiedades:

  • Formato: especifica cómo debe abreviarse la información de excepción.

  • Estilo: define el aspecto que deben tener los distintos elementos de excepción (como nombres de métodos, rutas o mensajes).

Spectre.Console ofrece un amplio conjunto de opciones de estilo, como colores de primer plano, colores de fondo y decoraciones (como subrayado, parpadeo, negrita, etc.).

Tim señala que también se puede aplicar estilo a otras partes de la visualización de excepciones, como nombres de parámetros, llamadas a métodos o paréntesis, no sólo al mensaje. Esto permite un control muy preciso sobre el aspecto de la salida de excepciones en la CLI.

Estilización del mensaje de excepción

Para mostrar cómo funciona el estilo en acción, Tim aplica un estilo específicamente a la parte del mensaje de la excepción. Establece el color del mensaje en rojo y añade un efecto de parpadeo lento para que destaque aún más:

Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)

Cuando ejecuta la aplicación, el mensaje "Oye, te olvidaste de darme los datos" ahora parpadea en rojo dentro de la ventana del terminal.

Tim señala que esto ayuda a resaltar la información más importante de la salida de excepción: el mensaje en sí. El resto del texto (como el nombre del archivo y el número de línea) sigue disponible a continuación, pero tus ojos se fijarán inmediatamente en lo que salió mal.

Realmente atrae la atención hacia lo más importante, que es el mensaje en sí", explica. Y luego pueden darse cuenta, oh, está en main en Program.cs en la línea 256"

Esto demuestra cómo Spectre.Console no sólo hace que los datos sean legibles, sino que también añade énfasis y jerarquía visual para ayudar a interpretar los resultados más rápidamente.

Conclusión de la serie de consolas Spectre

Al final del vídeo, Tim menciona que esta es la última parte de su serie Spectre.Console, al menos por ahora. Anima a los espectadores a dejar sus comentarios o sugerencias sobre más temas en suggestions.iamtimcorey.com.

Señala que, a lo largo de la serie, han cubierto una serie de características de Spectre: representación de tablas, manejo de comandos y argumentos CLI, trabajo con texto estructurado y, ahora, excepciones de formato.

Tim concluye diciendo que esta lección ofrece a los desarrolladores las herramientas necesarias para gestionar las excepciones con elegancia, claridad e información visual, todo ello en una sencilla aplicación de consola .NET.

Reflexiones finales

A través de este tutorial, Tim Corey demuestra claramente cómo hacer que las excepciones de Spectre.Console sean más legibles, informativas y visualmente atractivas. Utilizando sólo unas pocas líneas de código, los desarrolladores pueden:

  • Gestione las excepciones de forma más eficaz.

  • Dar formato a la salida de la consola con rutas acortadas y texto más limpio.

  • Utilice objetos ExceptionSettings para ajustar el formato y el estilo.

  • Añada color y decoración para resaltar la información importante.

  • Mostrar las rutas de los archivos como enlaces sobre los que se puede hacer clic o pasar el ratón.

Este enfoque no sólo mejora la depuración, sino que también hace que las aplicaciones basadas en CLI parezcan pulidas y profesionales. Mediante la combinación de potentes métodos como AnsiConsole.WriteException(), configuraciones personalizables y ricas opciones de estilo, los desarrolladores pueden crear aplicaciones de consola .NET que proporcionen una salida de excepciones significativa y bien estructurada que sea fácil de analizar y comprender, exactamente como Tim Corey muestra en su excelente ejemplo.

Hero Worlddot related to Formateo de la pantalla de excepciones - Consola de la serie Spectre
Hero Affiliate related to Formateo de la pantalla de excepciones - Consola de la serie Spectre

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame