İstisna Görüntüleme Biçimlendirme - Spectre Console Serisi
.NET konsol uygulaması oluştururken, genellikle hem geliştiriciler hem de kullanıcılar için anlamlı olacak şekilde istisnaları ele almanız gerekir. Düz konsol çıktısı, istisnaların uzun, okunamaz veri dizileri gibi görünmesine neden olabilir — özellikle yığın izleri ve yansıma ağırlıklı kütüphanelerle uğraşırken. Tim Corey, "Hata Gösterimini Formatlama - Spectre Konsol Serisi" adlı videosunda, istisnaları okumayı, ayrıştırmayı ve anlamayı kolaylaştırmak için Spectre.Console kütüphanesini nasıl kullanacağımızı anlatıyor.
Bu makalede, Tim'in istisnaları nasıl ele aldığını, Spectre.Console'dan komutları ve metotları nasıl kullandığını ve istisna gösterimine farklı ayarları ve stilleri nasıl uyguladığını inceleyeceğiz.
Giriş: Format İstisnaları Neden?
Videonun başında, Tim Corey Spectre.Console'u tanıtarak, geliştiricilere sade konsol uygulamalarını "görsel olarak çekici, bilgilendirici uygulamalar" haline getirmelerine yardımcı olan bir kütüphane olarak tanımlar. Bu özel derste, istisnaların daha açık ve okunabilir bir şekilde nasıl ele alınacağını üzerinde duruyor.
Tim, bir console uygulamasında bir istisna atıldığında, varsayılan olarak Console.WriteLine(ex) ile elde ettiğiniz çıktının sadece bir metin duvarı olduğunu açıklar. Yolları, yığın izlerini ve tip adlarını içerir — hepsi sürekli bir dize olarak. İşlevsel, ancak kullanıcı dostu değil.
Örnek olarak göstermek için, Tim küçük bir örnek oluşturur:
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);
}Bu komutu terminalde çalıştırır ve beklendiği gibi çıktı dağınıktır. Her şey birbirine karışıyor. Tim, önemli olanın mesaj mı, yöntem mi yoksa dosya konumu mu olduğunu seçmenin zor olduğunu belirtiyor. Bu nedenle, Spectre.Console istisna formatlamasını kullanarak bunu düzeltmeye girişiyor.
AnsiConsole.WriteException Kullanımı – İlk Adım
Görüntüyu iyileştirmek için Tim şu satırı değiştirir:
Console.WriteLine(ex);Console.WriteLine(ex);bir Spectre komutu ile:
AnsiConsole.WriteException(ex);AnsiConsole.WriteException(ex);Bu tekil metod çağrısı her şeyi değiştirir.
Uygulamayı tekrar çalıştırdığında, terminaldeki çıktı artık renklendirilmiştir. Mesaj net bir şekilde görünüyor ve yığın izleme bölümleri farklı bir şekilde biçimlendirilmiştir. Metin daha kolay ayrıştırılır ve anahtar değerler öne çıkar.
Tim, AnsiConsole sınıfının Spectre.Console'da stilli çıktı oluşturmak için merkezi erişim noktası olarak görev yaptığını belirtir. WriteException() yöntemi, özel olarak istisnaları ele almak ve onları sizin için otomatik olarak biçimlendirmek amacıyla tasarlanmıştır.
O, "Bu zaten bir adım önde." diyor. Konsol şimdi mesajı, dosya yolunu ve yöntem adını vurguluyor ve bu da hızlıca okumayı çok daha kolay hale getiriyor.
ExceptionFormats ile Biçimlendirme Seçenekleri Eklemek
Temel örneği gösterdikten sonra Tim, görüntülenen istisna kısımlarını ve nasıl kısaltıldıklarını kontrol etmek için biçimlendirme parametreleri ekleyerek bir adım ileri götürür.
O, ShortenPaths, ShortenTypes, ShortenMethods ve ShowLinks gibi çeşitli seçenekler sunan ExceptionFormats numaralandırmasını tanıtıyor. Bunları tek tek kullanabilir veya boru (|) karakteri.
Tim aşağıdaki kodu yazar:
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);Bu komutu çalıştırdığında, konsol çıktısı daha kısa ve öz hale gelir.
Şunları açıklıyor:
Yollar kısaltılır – tam dizin yolunu göstermek yerine, sadece Program.cs gibi dosya adını gösterir.
Türler kısaltılır – System.IO.InvalidDataException yerine, sadece InvalidDataException görürsünüz.
- Metotlar kısaltılmıştır – uzun genel metot adları netlik için kısaltılır.
Bu örnek, Spectre.Console'un istisna biçimlendirme seçeneklerinin, temel bilgileri kaybetmeden sonucu daha kompakt hale nasıl getirdiğini göstermektedir.
Tim, ilk sürümün (tam yol ve ad alanları) "çoğunlukla gürültü" içerdiğini vurgularken, bu biçimlendirilmiş sürümün sorunun kaynağını hızlıca görmek istediğinizde daha anlamlı olduğunu belirtir.
Daha Fazla Kontrol için Birden Fazla Formatı Birleştirme
Tim orada durmaz. Pipe operatörünü kullanarak birden fazla biçimlendirme ayarı nasıl birleştirebileceğinizi gösteriyor:
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);3:54'te Tim, ShowLinks seçeneğini açıklar. Bu, Spectre.Console'un uyumlu terminallerde tıklanabilir veya üzerinde gezilebilir dosya bağlantılarını render etmesine olanak tanır. Bu örnekte, Program.cs dosya adı şimdi altı çizili olarak görünüyor. Üzerine geldiğinde, terminal tam dosya yolunu içeren bir araç ipucu gösterir.
Bu davranışın sizin ortamınıza bağlı olduğunu belirtir — bu, tıklanabilir bağlantıları destekleyen terminallerde (bazı bash veya VS Code terminalleri gibi) daha iyi çalışır.
Formatları birleştirerek, istisna çıktınızın ne kadar bilgi göstermesi gerektiğine tam olarak karar verebilirsiniz — belki kısaltılmış yollar ama tam tür adları istiyorsunuzdur ya da yöntem ayrıntılarını tamamen gizlemek istiyorsunuzdur. Spectre.Console size bu esnekliği sağlar.
ExceptionSettings ile Derinlemesine İnceleme
Bu noktada, Tim "ExceptionSettings" adında yeni bir nesne tanıtır. Bu, istisnaların biçimlendirilmesi ve stillendirilmesini daha gelişmiş bir şekilde birlikte özelleştirmenizi sağlar.
Tek bir format değeri geçirmek yerine, tüm ayar nesnesini geçirebileceğinizi açıklar:
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);Burada Tim, iki özelliği yapılandırır:
Format – istisna bilgilerini nasıl kısaltılması gerektiğini belirtir.
- Stil – farklı istisna öğelerinin (metot adları, yollar veya mesajlar gibi) nasıl görüneceğini tanımlar.
Spectre.Console, ön plan renkleri, arka plan renkleri ve süslemeler (altı çizili, yanıp sönme, kalın vb. gibi) gibi zengin bir stil seçenekleri seti sunar.
Tim, istisna gösteriminin yalnızca mesajı değil, parametre adları, yöntem çağrıları veya parantezler gibi diğer bölümlerinin de stilize edilebileceğini belirtiyor. Bu, CLI'daki hata çıktınızın nasıl görüneceği üzerinde çok ince ayarlı bir kontrol sağlar.
Hata Mesajını Biçimlendirme
Biçimlendirmenin nasıl çalıştığını göstermek için Tim, özellikle istisnanın mesaj kısmına bir stil uygular. Mesaj rengini kırmızı yapar ve daha da öne çıkması için yavaş bir yanıp sönme efekti ekler:
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)Uygulamayı çalıştırdığında, "Hey, you forgot to give me the data." mesajı artık terminal penceresinin içinde kırmızı renkte yanıp sönüyor.
Tim, bu yaklaşımın, istisna çıktısındaki en önemli bilgi parçasını — mesajın kendisini — vurgulamakta yardımcı olduğunu belirtir. Geriye kalan metin (dosya adı ve satır numarası gibi) aşağıda kullanılabilir durumda kalır, ancak gözleriniz hemen yanlış giden kısma çekilir.
"Gerçekten dikkatinizi en önemli şeye, yani mesajın kendisine çekiyor," diye açıklıyor. Ve sonra, ana dosya olan Program.cs'de 256. satırda olduğunu anlayabilirler.
Bu, Spectre.Console'un verileri sadece okunabilir hale getirmekle kalmayıp, aynı zamanda sonuçları daha hızlı yorumlamanıza yardımcı olacak vurgu ve görsel hiyerarşi eklediğini göstermektedir.
Spectre Console Serisini Tamamlama
Video sona ererken, Tim Spectre.Console serisinin en azından şimdilik son kısmı olduğunu belirtir. İzleyicilere, daha fazla konu için geribildirim veya öneride bulunmalarını suggestions.iamtimcorey.com adresinden yapmalarını teşvik ediyor.
Seri boyunca Spectre özelliklerinin bir dizi ele alındığına dikkat çekiyor: tabloların işlenmesi, CLI komutları ve argümanlarıyla çalışma, yapılandırılmış metinlerle çalışma ve şimdi de istisnaların biçimlendirilmesi.
Tim, bu dersin geliştiricilere, basit bir .NET konsol uygulaması içinde, istisnaları zarif bir şekilde, netlik ve görsel geri bildirimle ele almaları için gerekli araçları sağladığını söyleyerek bitiriyor.
Son Düşünceler
Bu yürüyüşte, Tim Corey, Spectre.Console istisnalarını daha okunabilir, bilgilendirici ve görsel olarak etkileyici hale getirmenin nasıl yapılacağını açıkça göstermektedir. Sadece birkaç satır kod kullanarak, geliştiriciler şunları yapabilir:
Hataları daha etkili bir şekilde yönetin.
Konsol çıktısını kısaltılmış yollar ve daha temiz metinle formatlayın.
ExceptionSettings nesnelerini kullanarak format ve stili ince ayarlayın.
Önemli bilgileri vurgulamak için renk ve süslemeler ekleyin.
- Dosya yollarını tıklanabilir veya üzerine gelindiğinde açılabilir bağlantılar olarak gösterin.
Bu yaklaşım sadece hata ayıklamayı geliştirmekle kalmaz, aynı zamanda CLI tabanlı uygulamaları düzgün ve profesyonel gösterir. AnsiConsole.WriteException() gibi güçlü yöntemleri, özelleştirilebilir ayarları ve zengin stil seçeneklerini birleştirerek geliştirme yaparken, geliştiriciler .NET konsol uygulamaları inşa edebilir. Bu uygulamalar, Tim Corey'nin mükemmel örneğinde gösterdiği gibi, anlamlı ve iyi yapılandırılmış istisna çıktıları sağlar.

