Makale Özeti

Bu makalede ASP.NET ile EventViewer'ın nasıl kullanıldığı anlatılacaktır.

Makale

ASP.NET ile Olay Görüntüleyicinin Kullanılması (EventViewer)
.Net Framework farklı log tutma araçlarını sunmaktadır. Bir hata meydana geldiğinde mail gönderebilir, veritabanına kayıt edebilir yada bir dosya oluşturup ona kayıt yapabilirsiniz. Log tutma araçlarınından biri de Windows ta bulunan Event Log dur. Logları görebilmek için şu yol izlenir: Başlat -> Ayarlar -> Denetim Masası -> Yönetimsel Araçlar -> Olay Görüntüleyicisi
Olay görüntüleyici varsayılan özelliğinde üç farklı log çeşidi tutmaktadır. Bunlar: Application, Security ve System dir.
Application Log: Herhangi bir uygulamada hata izleme ve haber vermek için genellikle bu log kullanılır ya da kendinize ait olan log tutucuyu oluşturursunuz.
Security Log: Güvenliğe bağlı problemleri izlemek için kullanılır. Fakat genellikle işletim sistemi tarafından kullanılınır.
System Log: işletim sistemi olaylarını takip etmek için kullanılınır.
Olay yakalayıcısının olayları tutabileceği bir maksimum kapasitesi vardır . Varsayılan değeri 512 KB dir. Bu değer aşıldığı an olaylar otomatik olarak eski olayların üzerine yazılır. Varsayılan olarak yedi gün önceki olayların üzerine yazılır. Fakat bu değerleri değiştirmek mümkündür. Bunun için application log özelliğinin üzerine gelip sağ tıklayıp özellikler seçilir. Karşınıza application loga ait özelliklerini tutulduğu pencere açılacaktır.
Otomatik log silme özelliğinin iptal edilmesi tavsiye edilmeyen bir durumdur. Olayların boşa yer kaplamasına sebep olursunuz. Daha fazla bilgi tutmak istiyorsanız, olayların tutulabileceği boyutu artırılmalıdır.
Olay yakalayıcı sınıfın kullanılması (EventLog)
ASP.NET sayfalarında olay yakalayıcısını kullanabilmek için System.Diagnostics uzayını eklememiz gerekmektedir.
using System.Diagnostics;
Veritabanına kayıt yapan basit bir örnek yapalım. Herhangi bir hata meydana geldiğinde ise hatayı olay yakalayıcısına kayıt etsin. Sayfaya iki tane textbox ve bir tane buton kontrolü konulur ve kayıt işlemini gerçekleştirmek için butonun click olayından faydalanılır. Butona ait click olayı aşağıdaki gibidir. Bir hata oluşturabilmek için açık olan connectionı iptal ettim.
   protected void btnEkle_Click(object sender, EventArgs e)
{
   try
     {
          OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
          OleDbCommand cmd = new OleDbCommand("insert into InfoASPNET (infoBaslik, infoIcerik) values (@infoBaslik,@infoIerik) ", con);

          OleDbParameter prm1 = cmd.Parameters.AddWithValue("@infoBaslik", TextBox1.Text);
          OleDbParameter prm2 = cmd.Parameters.AddWithValue("@infoIerik", FreeTextBoxMetin.Text);

          // con.Open();
          cmd.ExecuteNonQuery();
          con.Close();

          Response.Write("Eklem işlemi gerçekleşti");
       }

       catch(Exception ex)
       {
         Response.Write("Message: "  + ex.Message);
         Response.Write("Source: " + ex.Source);
         Response.Write("Stack Trace: " + ex.StackTrace);

         EventLog log = new EventLog();
         log.Source = "EklemeIslemi";
         log.WriteEntry(ex.Message,EventLogEntryType.Error);

        }
      }
}


   
Butonun click olayı çalıştırdıktan sonra, olay yakalayıcısı açıldığında olayın kayıt edildiği görülür.
İsterseniz var olan olay yakalayıcılar dışında kendinize ait bir olay yakalayıcısı oluşturup, hatalarınızı oluşturduğunuz olay yakalayıcında tutabilirsiniz. Bunun için EvenLog sınıfına ait faklı bir constructor kullanılır.
    //Ozlem adında bir  log tutma kaynağının olup olmadığı kontrol ediliyor. Yoksa “ozlem” adında bir olay tutucu oluşturlur.
    if (!EventLog.SourceExists("Ozlem"))
    {
      EventLog.CreateEventSource("EklemeIslemiYapilmadi", "Ozlem");
    }

    EventLog log = new EventLog("Ozlem");
    log.Source = "EklemeIslemiYapilmadi";
    log.WriteEntry(ex.Message,EventLogEntryType.Error);
   
Önemli olmayan bilgileri, büyük kapasiteye sahip verileri ya da bilgileri olay görüntüleyicsine yüklemeyin. Hem diskinizde yer kaplayacak hem de işlem zaman alacaktır. Olay görüntüleyicisini kabul edilmeyecek koşullar ve hatalar meydana gelebilecek durumlarda kullanın . Web uygulamalarında event log kullanılması durumunda diskte yer kaplar ve işlemin gerçekleşmesi zaman alır.
Olay yöneticisine yüklenmiş olan olayların listesini alabilmek de mümkündür. Kendi adıma oluşturduğum “Ozlem” olay görüntüleyicisi altındaki bilgileri getiren kod aşağıdaki gibidir
      StringBuilder sb = new StringBuilder();
        EventLog log = new EventLog("Ozlem");

        foreach (EventLogEntry entry in log.Entries)
        {
            sb.Append("Entry Type:");
            sb.Append(entry.EntryType.ToString());
            sb.Append("Mesaj:");
            sb.Append(entry.Message.ToString());
            sb.Append("Generated Time:");
            sb.Append(entry.TimeGenerated);
           
        }

        Response.Write(sb.ToString());
   
  Özlem Arslan
  ce.arslanozlem@mail.com

  Kaynak: msdn.com
  ASP.NET 2.0 Apress yayınları