C# EventLog Sınıfının Kullanımı
Burada loglamayla ilgili ufak bir uygulama yapacağız.
Öncelikle Logger.cs sayfasını oluşturalım.
--Logger.cs--
class Logger
{
private void Logla(string LogMesaji,bool HataMi)
{
if (!EventLog.SourceExists("Gençay"))
{
EventLog.CreateEventSource("Gençay","Gençay");
}
EventLog loglama = new EventLog();
loglama.Source = "Gençay";
if (HataMi)//Eğer HataMi değişkeni True ise hata olarak loglayacak,False ise Bilgi olarak.
{
loglama.WriteEntry(LogMesaji, EventLogEntryType.Error);
}
else
{
loglama.WriteEntry(LogMesaji, EventLogEntryType.Information);
}
}
/*Yukardaki metod private olarak tanımlanmıştır.Dışardan Logger classının nesnesinden
bu metoda ulaşılamaz.Bu metod log kayıt etme işlemini gerçekleştirmektedir.*/
private void SqlHatalariKodla(string LogMesaji,SqlErrorCollection SqlHatalari)
{
StringBuilder sb = new StringBuilder();
foreach (SqlError hata in SqlHatalari)
{
sb.AppendLine("Hata Tarihi :");
sb.Append(DateTime.Now);
sb.Append(Environment.NewLine);
sb.AppendLine("Satır Numarası :");
sb.Append(hata.LineNumber);
sb.Append(Environment.NewLine);
sb.AppendLine("Mesaj :");
sb.Append(hata.Message);
sb.Append(Environment.NewLine);
sb.AppendLine("No :");
sb.Append(hata.Number);
sb.Append(Environment.NewLine);
sb.AppendLine("Prosedür :");
sb.Append(hata.Procedure);
sb.Append(Environment.NewLine);
sb.AppendLine("Kaynak");
sb.Append(hata.Source);
sb.Append(Environment.NewLine);
sb.AppendLine("Sever");
sb.Append(hata.Server);
sb.Append(Environment.NewLine);
sb.Append(Environment.NewLine);
sb.Append(Environment.NewLine);
sb.Append("----------------------------------");
sb.Append(LogMesaji);
}
Logla(sb.ToString(), true);
}
/*Bu metod ise sadece SqlException hatalarını yakalar.SqlException dan gelen
hatalar SqlError tipindedir ve bu hatalar SqlErrorCollection koleksiyonuda tutulur.
SqlError tipini kullanarak biz bir sql hatasının tüm detay bilgilerine erişebiliriz.
Bu detay bilgileriyle hatanın oluşma zamanı, tipi, mesajı, satır nosu gibi bilgilere
erişebiliriz.StringBuilder sınıfını kullanarak bu bilgileri belirli bir düzende toplayarak
,en son Logla metodunu çağırıp kayıt ediyoruz.Ancak dikkat ederseniz bu metodumuzda private.
Yani bunada dışardan erişim sağlayamıyoruz.Peki bu metodları nasıl devreye sokacağız?*/
/*Bir tane public metod oluşturacağım.Bu metod Exception tipinden parametre alacak.
Biliyoruz ki hataların en geneli Exception tiptir.Diğer hatalar bunun içindedir.Eğer bir hata
geldiğinde SqlException tipine çevirebiliyorsak eğer SqlHatalariKodla() metodu çalıştırılacak.
Eğer çevrilmiyorsa demek ki başka bir hata var(SqlException tipinden olmayan ama Exception tipinin kapsadığı)
o zamanda o hatayı alıp direkt olarak Logla() metodunu çalıştıracağız.*/
public void Loglayalım(Exception hata)
{
SqlException hatam = hata as SqlException;
/* as operatörü sayesinde Exception tipindeki hata referansı SqlExeption
tipine dönebiliyorsa o tipe çevirecektir.Eğer dönmüyorsa null değerini verecektir.*/
if (hatam==null)
{
Logla(hatam.Message, true);
}
else
{
SqlHatalariKodla(hata.Message, hatam.Errors);
}
}
//Gördüğünüz gibi yukardaki metod anlattığımız işlemi gerçekleştirmektedir.
}
Yukardaki Logger.cs classını çalıştıracağımız hatalı kodlarımız da Form1.cs sayfasında mevcut olacaktır.
private void Form1_Load(object sender, EventArgs e)
{
try
{
SqlConnection baglanti = new SqlConnection("Server=GENCAY-GENCAY;database=northwind;trusted_connection=true;");
SqlCommand cmd = new SqlCommand("Select * ffrom Personeller", baglanti);
SqlDataAdapter dap = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dap.Fill(dt);
dataGridView1.DataSource = dt;
}
catch (Exception hata)
{
Logger calistir = new Logger();
calistir.Loglayalım(hata);
}
}
Dikkat ederseniz sorguda from yerine ffrom yazdım.Bu kodları çalıştırırsanız loglama işlemi başarıyla gerçekleştiğini göreceksiniz.

‘System.Security.SecurityException’ türünde bir yakalanamayan özel durum, System.dll öğesinde oluştu
Ek bilgi: Kaynak bulunamadı; ancak olay günlüklerinin bazılarında veya hiçbirinde arama yapılamadı. Erişilemeyen günlükler: Security.
Hatasını nasıl düzeltebilirim. gerekli log dosyasını oluşturdum ama böyle bir hata alıyorum
‘System.Security.SecurityException‘
Bu hatanın çözümü;
Projeyi çalıştırmadan önce Visual Studio programını Yönetici olarak çalıştırmanız gerekmektedir.
Tşk ederim güzel anlatmişsin
Eee kıymetimizi bilen yok 😛
Latifesi bir yana çok teşekkür ederim Cihan kardeşim.
rica ederim kıymetli gencay kardeşim 🙂