Przejdź do treści stopki
Iron Academy Logo
Aplikacja C#
Aplikacja C#

Inne Kategorie

Formatowanie wyświetlania wyjątków - seria Spectre Console

Tim Corey
8m 51s

Podczas tworzenia aplikacji konsolowej .NET często trzeba obsługiwać wyjątki w sposób zrozumiały zarówno dla programistów, jak i użytkowników. Zwykłe dane wyjściowe konsoli mogą sprawiać, że wyjątki wyglądają jak długie, nieczytelne ciągi danych — zwłaszcza w przypadku śladów stosu i bibliotek intensywnie wykorzystujących refleksję. W swoim filmie "Formatting Exception Display - Spectre Console Series" Tim Corey pokazuje, jak korzystać z biblioteki Spectre.Console, aby wyjątki były łatwiejsze do odczytania, analizy i zrozumieniuiuiuiuia.

W tym artykułe przyjrzymy się, jak Tim radzi sobie z wyjątkami, korzysta z poleceń i metod z Spectre.Console oraz stosuje różne ustawienia i style wyświetlania wyjątków.

Wprowadzenie: Dłączego wyjątki formatowania?

Na początku filmu Tim Corey przedstawia Spectre.Console, opisując ją jako bibliotekę, która pomaga programistom przekształcić ich proste aplikacje konsolowe w "atrakcyjne wizualnie, bogate w informacje aplikacje". W tej konkretnej lekcji skupia się na tym, jak obsługiwać wyjątki w sposób, który sprawia, że ich wyświetlanie jest bardziej przejrzyste i czytelne.

Tim wyjaśnia, że domyślnie, gdy w aplikacji konsolowej zostanie zgłoszony wyjątek, wynik uzyskiwany z Console.WriteLine(ex) to po prostu ściana tekstu. Zawiera ścieżki, ślady stosu i nazwy typów — wszystko w postaci ciągłego ciągu znaków. Jest funkcjonalne, ale nieprzyjazne.

Aby to zilustrować, Tim tworzy mały przykład:

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

Uruchamia to polecenie w terminalu i, zgodnie z oczekiwaniami, wynik jest chaotyczny. Wszystko się ze sobą łączy. Tim zauważa, że trudno jest wybrać, co jest najważniejsze — komunikat, metodę czy lokalizację pliku. Postanowił więc to naprawić, korzystając z formatowania wyjątków Spectre.Console.

Korzystanie z AnsiConsole.WriteException – pierwszy krok

Aby poprawić wygląd, Tim zastępuje wiersz:

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

za pomocą polecenia Spectre:

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

To jedno wywołanie metody zmienia wszystko.

Kiedy ponownie uruchamia aplikację, wynik w terminalu jest teraz wyświetlany w kolorze. Komunikat jest wyraźny, a sekcje śladu stosu mają odmienny styl. Tekst jest łatwiejszy do analizy, a kluczowe wartości są wyraźnie zaznaczone.

Tim zwraca uwagę, że klasa AnsiConsole pełni rolę centralnego punktu dostępu w Spectre.Console do renderowania stylizowanego wyjścia. Metoda WriteException() została zaprojektowana specjalnie w celu obsługi wyjątków i automatycznego formatowania ich za użytkownika.

Mówi: "To już krok naprzód". Konsola podświetla teraz komunikat, ścieżkę do pliku i nazwę metody, co znacznie ułatwia odczytanie informacji na pierwszy rzut oka.

Dodawanie opcji formatowania za pomocą ExceptionFormats

Po przedstawieniu podstawowego przykładu Tim idzie o krok dalej, dodając parametry formatowania, aby kontrolować, które części wyjątku są wyświetlane i w jaki sposób są skracane.

Wprowadza on wyliczenie ExceptionFormats, które zapewnia kilka opcji, takich jak ShortenPaths, ShortenTypes, ShortenMethods i ShowLinks. Można używać ich pojedynczo lub łączyć za pomocą znaku pipe (|) znak.

Tim pisze następujący kod:

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

Po uruchomieniu tego polecenia wynik wyświetlany w konsoli staje się krótszy i bardziej zwięzły.

Wyjaśnia on, że:

  • Ścieżki są skrócone – zamiast pokazywać pełną ścieżkę katalogową, wyświetlana jest tylko nazwa pliku, np. Program.cs.

  • Nazwy typów są skracane – zamiast System.IO.InvalidDataException widzisz po prostu InvalidDataException.

  • Metody są skracane – długie, ogólne nazwy metod są skracane dla większej przejrzystości.

Ten przykład pokazuje, w jaki sposób opcje formatowania wyjątków w Spectre.Console sprawiają, że wynik jest bardziej zwięzły bez utraty istotnych informacji.

Tim podkreśla, że pierwsza wersja (pełna ścieżka i przestrzenie nazw) zawiera "głównie szum", podczas gdy ta sformatowana wersja ma większy sens, gdy chcesz po prostu szybko zobaczyć źródło problemu.

Łączenie wielu formatów dla większej kontroli

Tim nie poprzestaje na tym. Pokazuje on, jak można łączyć wiele ustawień formatowania za pomocą operatora pipe:

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

O godz. 3:54 Tim wyjaśnia opcję ShowLinks. Dzięki temu Spectre.Console może renderować linki do plików, które można kliknąć lub na które można najechać kursorem, w kompatybilnych terminalach. W tym przykładzie nazwa pliku Program.cs jest teraz podkreślona. Po najechaniu kursorem terminal wyświetla podpowiedź z pełną ścieżką do pliku.

Zauważa, że zachowanie to zależy od środowiska — działa lepiej w terminalach obsługujących klikalne linki (takich jak niektóre terminale bash lub VS Code).

Łącząc formaty, możesz dokładnie określić, ile informacji ma wyświetlać komunikat o wyjątku — może chcesz skrócone ścieżki, ale pełne nazwy typów, a może chcesz całkowicie ukryć szczegóły metod. Spectre.Console zapewnia taką elastyczność.

Więcej informacji na temat ExceptionSettings

W tym momencie Tim wprowadza nowy obiekt o nazwie ExceptionSettings. Pozwala to na bardziej zaawansowane dostosowywanie zarówno formatowania, jak i stylizacji wyjątków.

Wyjaśnia, że zamiast przekazywać pojedynczą wartość formatu, można przekazać cały obiekt ustawień:

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

W tym miejscu Tim konfiguruje dwie właściwości:

  • Format – określa, w jaki sposób informacje o wyjątku powinny zostać skrócone.

  • Styl – określa, jak powinny wyglądać różne elementy wyjątków (takie jak nazwy metod, ścieżki lub komunikaty).

Spectre.Console zapewnia bogaty zestaw opcji stylizacji, takich jak kolory pierwszego planu, kolory tła oraz ozdobniki (np. podkreślenie, miganie, pogrubienie itp.).

Tim zauważa, że można również stylizować inne elementy wyświetlania wyjątków, takie jak nazwy parametrów, wywołania metod lub nawiasy — nie tylko sam komunikat. Pozwala to na bardzo precyzyjną kontrolę nad wyglądem komunikatów o wyjątkach w interfejsie CLI.

Stylizacja komunikatu o wyjątku

Aby pokazać, jak stylizacja działa w praktyce, Tim stosuje styl specjalnie do części komunikatu dotyczącej wyjątku. Ustawia kolor wiadomości na czerwony i dodaje efekt powolnego migania, aby jeszcze bardziej ją wyróżnić:

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

Kiedy uruchamia aplikację, w oknie terminala miga teraz na czerwono komunikat "Hej, zapomniałeś podać mi dane".

Tim zwraca uwagę, że pomaga to podkreślić najważniejszy element informacji w komunikacie o wyjątku — sam komunikat. Pozostała część tekstu (np. nazwa pliku i numer linii) pozostaje dostępna poniżej, ale wzrok natychmiast kieruje się na to, co poszło nie tak.

Wyjaśnia: "To naprawdę kieruje uwagę na to, co najważniejsze, czyli sam komunikat". Wtedy mogą zorientować się: "Aha, to jest w pliku main w Program.cs w linii 256".

To pokazuje, jak Spectre.Console nie tylko sprawia, że dane są czytelne, ale także dodaje akcenty i hierarchię wizualną, aby pomóc Ci szybciej interpretować wyniki.

Podsumowanie serii Spectre Console

Na zakończenie filmu Tim wspomina, że była to ostatnia część jego serii Spectre.Console — przynajmniej na razie. Zachęca on odbiorców do pozostawiania opinii lub sugestii dotyczących kolejnych tematów na stronie suggestions.iamtimcorey.com.

Zauważa, że w całej serii omówiono szereg funkcji Spectre: renderowanie tabel, obsługę poleceń i argumentów CLI, pracę z tekstem ustrukturyzowanym, a teraz także formatowanie wyjątków.

Tim kończy stwierdzeniem, że ta lekcja daje programistom narzędzia do płynnego obsługiwania wyjątków, zapewniające przejrzystość i wizualną informację zwrotną — a wszystko to w ramach prostej aplikacji konsolowej .NET.

Podsumowanie

W tym przewodniku Tim Corey jasno pokazuje, jak sprawić, by wyjątki Spectre.Console były bardziej czytelne, zawierały więcej informacji i były atrakcyjne wizualnie. Za pomocą zaledwie kilku wierszy kodu programiści mogą:

  • Skuteczniejsze radzenie sobie z wyjątkami.

  • Sformatuj wyjście konsoli, skracając ścieżki i upraszczając tekst.

  • Użyj obiektów ExceptionSettings, aby precyzyjnie dostosować format i styl.

  • Dodaj kolory i elementy dekoracyjne, aby wyróżnić ważne informacje.

  • Ścieżki plików należy wyświetlać jako linki, które można kliknąć lub na które można najechać kursorem.

Takie podejście nie tylko usprawnia debugowanie, ale także sprawia, że aplikacje oparte na CLI wyglądają na dopracowane i profesjonalne. Łącząc zaawansowane metody, takie jak AnsiConsole.WriteException(), konfigurowalne ustawienia i bogate opcje stylizacji, programiści mogą tworzyć aplikacje konsolowe .NET, które zapewniają znaczące, dobrze ustrukturyzowane komunikaty o wyjątkach, łatwe do analizy i zrozumieniuiuiuiuia — dokładnie tak, jak pokazuje Tim Corey w swoim doskonałym przykładzie.

Hero Worlddot related to Formatowanie wyświetlania wyjątków - seria Spectre Console
Hero Affiliate related to Formatowanie wyświetlania wyjątków - seria Spectre Console

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie