Yazdığımız programın hata verip vermediğini kullanıcıların anlayamadığı başka sorunlar var mı? Yok mu? Gibi sorunları takip etmek için try-catch bloğunda hata mesajlarını Event Log’a yazdırıp oradan takip edebiliyor olacağız.
Niye Böyle bir şey Yapalım ki?
İşimizi şansa ve kullanıcıya bırakmadan projemizdeki bugları bulabileceğız. (Ne demişler koyundan post userdan dost olmaz J) Bu da kötü niyetli kullanıcıların programdaki bugları değerlendirmesine engel olacaktır. Buda projemizin daha sağlıklı ilerlemesini sağlayacaktır.
ÖRNEK:
Konuyla ilgili bir örnek yapalım. İlk olarak hata mesajını event loga nasıl yazacağız ona bakalım… Bunun için Boş bir Class açalım. HataMesajiYaz Adında Static bir metod yazacağız.
İlk olarak
using System.Diagnostics; Namespaceni projemize dahil etmeliyiz.
|
C# .NET |
|
EventLogaYaz.cs |
|
public static void HataMesajiYaz(Exception HataMesaji)
{
string strLogMessage = "\nMessage : " + HataMesaji.Message +
"\nSource : " + HataMesaji.Source +
"\nTarget Site : " + HataMesaji.TargetSite +
"\nStack Trace : " + HataMesaji.StackTrace;
string logName = "BenimProjem";
// EventLogda Hata Mesajının Nereye yazılacağını Belirliyoruz… BenimProjem adında bir Log adı olmadığı için açmamız gerekiyor. Bunu da aşağıda anlatacağım.
if (!EventLog.SourceExists(logName))
{
EventLog.CreateEventSource(logName, logName);
}
EventLog log = new EventLog(); log.Source = logName;
//Nereye yazılacak? Event Logda BenimProjem Event log dosyasına yazılacak.
strLogMessage += "\r\n\r\n--------------------------\r\n\r\n" + HataMesaji.ToString();
// Hata Mesajını alıyoruz…
log.WriteEntry(strLogMessage, EventLogEntryType.Error, 65534);
// Hata mesajını log dosyasına yazdırıyoruz…
} |
Şimdi aynı işlemin VB.NET ile nasıl yapıldığına bakalım.
|
VB .NET |
|
EventLogaYaz.vb |
|
Public Shared Sub HataMesajiYaz(ByVal HataMesaji As Exception)
Dim strLogMessage As String = "" & Chr(10) & "Message : " + HataMesaji.Message + "" & Chr(10) & "Source : " + HataMesaji.Source + "" & Chr(10) & "Target Site : " + HataMesaji.TargetSite + "" & Chr(10) & "Stack Trace : " + HataMesaji.StackTrace
Dim logName As String = " BenimProjem "
If Not EventLog.SourceExists(logName) Then
EventLog.CreateEventSource(logName, logName)
End If
Dim log As New EventLog()
log.Source = logName
strLogMessage += "" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "--------------------------" & Chr(13) & "" & Chr(10) & "" & Chr(13) & "" & Chr(10) & "" + HataMesaji.ToString()
log.WriteEntry(strLogMessage, EventLogEntryType.[Error], 65534)
End Sub |
Yukarıda da bahsettiğim gibi projemiz için EventLog da yeni bir Log adı açmamız gerekiyor. Bunun için Kayıt Defterine girip yeni bir Dosya Adı açmalıyız. Bu dosya Adı da yukarıda belirttiğimiz BenimProjem olacak J
Kayıt Defterini açıp
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog Gelip, EventLog üzerinde sağ tuş diyelim. Yeni Sekmesinden Anahtarı seçelim ve BenimProjem Yazalım J Evet artık hata mesajlarımız artık loga yazılmaya hazır J

Şimdi bir proje de hata ve hatalar yapalım J
public HaberKolleksiyonu HaberleriGetir(int KategoriID, int AktifSayfa)
{
try
{
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@KategoriID",KategoriID),
new SqlParameter("@AktifSayfa", AktifSayfa)
};
Ds = SqlHelper.ExecuteDataset(ConnectionString, CommandType.StoredProcedure, "HaberleriGetir",parameters);
if (Ds != null && Ds.Tables.Count > 0&& Ds.Tables[0].Rows.Count>0)
{
kHaberKolleksiyonu = new HaberKolleksiyonu();
for (int i = 0; i < Ds.Tables[0].Rows.Count; i++)
{
nHaberNesnesi = new HaberNesnesi(); Ds.Tables[0].Rows[i]["werwerwe"].ToString(); > Burada Hata yaptık J Böyle Bir field yok
kHaberKolleksiyonu.Add(nHaberNesnesi);
nHaberNesnesi = null;
}
}
return kHaberKolleksiyonu;
}
catch (Exception HataMesaji)
{
LogYonetimi.HataMesajiYaz(HataMesaji);
// Burada hata MesajınıEventloga yazdırıyoruz
return null;
}
Şimdi event loga gidelim.

Hatayı loga yazdık bakalım hata mesajı olarak ne yazıyor.

Message : Column 'werwerwe' does not belong to table Table. > Bu tabloda böyle field bulunamadı !
Geçmiş olsun J
Bu makalenin de sonunda geldik. Başka bir makale de görüşmek üzere.
Sem Göksu
sem.goksu@yazilimgunlugu.com
www.semgoksu.com | www.yazilimgunlugu.com
Kaynaklar
www.msdn.com
ww.aspalliance.com