ASP.NET Uygulama bazında hata yakalama(Application Error Management)

Temmuz 25, 2008

Bir çoğumuz yaptığımız sistemlerde oluşan hatalardan dolayı sıkıntıya düşmüşüzdür.Gelişmiş uygulamalarda oluşan hatalar,buglar kullanıcıya gösterilmez.Bunun yerine kullanıcıya yardımcı bir sayfa gösterilir.Mesela “Sistemde beklenmeyen bir hata oluştu.Lütfen söyle yapınız,böyle yapınız” şeklinde.Oluşan hataları log’lamak gerekir.Bu log’lama geliştirici açısından önemli olup,en çok nerelerde hata yaptığını da raporlayamabilir.

Asp.net’te hata yönetimi 2 türlü yapılmaktadır.Kod içerisinde try-catch-finally blog’ları kullanarak veya uygulama statüsünde global.asax dosyasındaki Application_Error methodunu kullanarak.

Şimdi sistemimize bir hata yöneticisi yapmayı planlıyoruz? Peki bu nasıl olacak?.Nasıl bir yöntem izlemeliyiz.?

Zaten try-catch-finally bloglarını kod içerisinde kullanmamız bize oldukça faydalı olacaktır.Biz uygumalama bazında hata yönetimi yapalım.

Yapacağımız ilk iş uygulamada oluşacak hatayı bulmaktır.Global.asax dosyası içinde:

void Application_Error(object sender,EventArgs e)

{

//son oluşan hatayı yakalıyoruz.

Exception ex = Server.GetLastError().GetBaseException();

//hatayı temizliyoruz.

Server.ClearError();

}

Burda birkaç yöntemden bahsetmek istiyorum.Biz bu aldığımız hatayı ne yapacağız?.İster loglayalım,ister bize e-mail olarak gelsin.Bence e-mail olarak gelsin:)

Global.asax dosyasının başına şu library’i ekleyelim:

using System.Net.Mail;

{

//son oluşan hatayı yakalıyoruz.

Exception ex = Server.GetLastError().GetBaseException();

//hatayı temizliyoruz.

Server.ClearError();

//Mail gönderme kodlarını yazalım.

StringBuilder sb = new StringBuilder();

sb.Append(“Stack Trace:”+ex.StackTrace.Trim()+”<br>”);

sb.Append(“Error Message:”+ex.Message+”<br>”);

string MailHTML = sb.ToString();

SmtpClient smtpserver = new SmtpClient();

MailAddress mSender = new MailAddress(“GonderenAdres@mailadresi.com”);

MailAddress MailTo = new MailAddress(kimegonderilecek@mailadresi.com);

MailMessage newMail = new MailMessage(mSender, MailTo);

newMail.IsBodyHtml = true;

newMail.Subject = “Koş admin koşş!”;

newMail.Body = MailHTML;

smtpserver.Send(newMail);

//Burda da kendi yaptığımız bir sayfaya yönlendirelim.

Response.Redirect(“~/Error.aspx(veya .html)”)

}

Tabi mail’i göndermeniz için web.config dosyası içinde smtp ayarlarını yapmamız gerekiyor.

<system.net>

<mailSettings>

<smtp from=”GonderenAdres@maildaresi.com”>

<network port=”25″ host=”mailsunucuadresi” userName=”kullaniciadi” password=”sifre” defaultCredentials=”true”/>

</smtp>

</mailSettings>

</system.net>

Bu ayarları yaptıktan sonra oluşan hata direk mailimize gelicektir :) Allah aşkına zormu :D

İyi kodlamalar..