StackTrace Sınıfı ile Detaylı Loglama

Kasım 20, 2011

Merhaba,  arkadaşlar uygulamalarımızdaki hataları yönetmek uygulamadaki hız veya güvenlik kadar önemli olabilmektedir bunun da sebebi ileride oluşabilecek çok önemli bir hatayı log lardan bakarak giderebiliriz böylece ileride oluşacak hatadan bir nebzede olsa erkenden kurtulmuş oluruz.Detaylı log lama üzerine bir örnek yaparak bu konuyu daha detaylı işleyelim.İlk olarak log’larımızı tutacagımız tablomuzu oluşturalım.

 

 

 

 

 

Log adında veri tabanımızda HataKayit adında tablomuzu ve resimdeki gibi alanlarımızı oluşturduk ID alanı Identity (otomatik artan) alandır.Şimdi .Net tarafına geçelim ve bu Log ‘ları tutacağımız tabloya hata yaparak log girmesini sağlayalım.Visual Studio’ da LogTutma adında bir tane Console uygulaması açıyoruz uygulamamızda gerekli using ‘leri ekleyelim

 

 

 

 

Uygulamamızda 2 tane method yazıcaz ve bu methodların içinde hata yaratarak catch blogunda hatayı log tablosuna aktaracagız ve  takip edecegiz.Uygulamamızda oluşan hataları try-catch yardımı ile yönetirken catch kısmında ise StackTrace ve StackFrame sınıfları yardımı ile hatanın nerede olduğuna hangi satırda ve hangi methodun içinde olduğuna kadar detaylı bilgilere ulaşabiliyor olacağız.İlk olarak uygulamamızın Main kısmını paylaşayım sonra methodlarımızı yazalım.

 

 

 

 

Method’larımızın 1. si Program.cs class ‘ının içinde diğeri ise farkı daha iyi anlaya bilmek için Exc class ‘ının içinde.Uygulama2 method’unu Exc class’ının içinde yazıyoruz.Program.cs ‘in altındaki Uygulama method’u

 

 

 

 

İşlem yapacak kodumuzu yazarken bilerek hata oluşturuyoruz string ifadeyi integer’a çevirmeye çalışarak.Dolayısıyla kod bu noktada hata verip catch blog’una düşüyor şimdi burada bizim hatanın detaylarına ulaşarak o ulaştığımız bilgileri veri tabanında oluşturduğumuz tabloya aktarmamız lazım bu bilgilere StackTrace sınıfı yardımı ile ulaşabiliriz ilk olarak StackTrace sınıfında yeni bir tane nesne oluşturuyoruz ve parametre olarak true değerini atıyoruz buradaki true hatanın oluştuğu satırada ulaşmamızı sağlıyor.Daha sonra oluşturduğumuz nesnenin Frame ‘leri arasında foreach yardımı ile dönüyoruz şu anda ulaştıgımız bilgiler StackFrame tipinde olduğu için foreach içinde StackFrame yazıyoruz.Elimizde o an oluşan frame’in dosya adında null veya boş kontrolü yapıyoruz değilse işleme devam ediyoruz.Log tablomuza yazmadan önce verileri program üzerinden görebilmek içinde ekrana yazdırıyoruz buradaki frame ‘in GetFileLineNumber method’u satır no’sunu bulmamıza GetMethod method’u hatanın oluştuğu method adını bulmamıza ve GetFileName method’u ise dosya adına ulaşmamıza yarıyor.Bu bilgileri bulduktan sonra artık veri tabanına aktarabiliriz ama daha önce yapmamız gereken küçük bir olay daha var oda şu o an yakaladığımız frame’in GetFileName method’u yardımı ile ulaşdığımız dosya adı kullanıcının bilgisayarındaki uzun path’i olarak gelmektedir örn : C:\\User\\xp\\Desktop\\TraceUygulama\\Bin\\Debug\\Program.cs  gibi bu bilginin neredeyse %80 ‘i bize lazım olmadığı için sadece işimize yarayan en son kısmını almak için en sondaki \\ ‘a ulaşıyoruz ve buradan sonraki adı alıyoruz veri tabanına aktarmak için çünkü burada bizim takip edeceğimiz sadece programımızın içindeki hangi .cs dosyasında hata oldugudur.Form adını hataForm değişkenine method adını hataMethod değişkenine hatanın satır numarasınıda hataSatir değişkenine aktarıyoruz daha sonra birazdan yazacağımız LogKaydet method’umuza gönderiyoruz ve veri tabanına aktarıyoruz.Uygulamazımda 2. bir class daha oluşturalım Exc adında 2. method’umuz olan Uygulama2 method’unuda bu class ‘ın içine yazalım.

 

 

 

 

Aynı şekilde bu method’umuzdada özellikle throw new Exception() diyerek hata fırlatıyoruz ve kod’un catch ısmına düşmesini sağlıyoruz Uygulama method’umuzda yazdığımız gibi burada’da oluşan hatanın detaylarına ulaşıyoruz ve ekrana yazdırdıktan sonra veri tabanına aktaracak olan LogKaydet method’umuzu çagırıyoruz tabi LogKaydet method’unu Program.cs class ‘ının altına yazdıgımız için Program.LogKaydet olarak çağırıyoruz bu class ‘ın içinden.Son olarak log’larımızı veri tabanına kaydeden LogKaydet method’umuzu yazalım.

 

 

 

 

Local veri tabanımıza veri yazacağımız için data source kısmına ‘.’ atıyoruz.SqlConnection ve SqlCommand nesnelerimizi using içinde oluşturduğumuz için kapatmaya veya Dispose method’larını çağırmaya gerek duymuyoruz çünkü using içinde oluşturulan nesneler otomatik olarak işi bitince kendi kapanacaktır.Method’umuza aldığımız değişkenleri parametre olarak gönderip daha  sonra ExecuteNonQuery method’unu çalıştırıyoruz.Programı’ımızı çalıştıralım ve hem veri tabanımızdan hemde programımızdan sonuçlara bakalım.

 

 

 

 

 

Uygulamızda oluşan tüm hataları yakaldık detaylarına ulaştık ve veri tabanına log tablomuza aktardık bu şekilde uygulamamız içinde hangi formda , method’da ve satırda hata olduğunu çok daha kolaylıkla takip edebilir ve müdahele edebiliriz.İyi çalışmalar.

 

 

 

Kaynak Kodları Buradan İndirebilirsiniz

posted in C# by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org