C#’da log tutmak için birçok seçenek var isterseniz veritabanına, dosyaya veya bu makalede anlatacağım windows işletim sisteminde yer alan olay görüntüleyicisine log atabilirsiniz.
C# ile windows olay görüntüleyicisine log atma
Log atmak bir geliştirici için büyük öneme sahiptir gerekli gördüğünüz yerlere loglama için gerekli işlemi yaptıktan sonra projeyi canlıya attığınızda gözünüzden ister istemez kaçan durumlardan dolayı sorunlar çıkması olasıdır bu sorunu geliştirme esnasındaki gibi debug etme şansınız pek olmadığından loglardan yola çıkarak çözüme varabilirsiniz yada yapılan işlemlere dair elinizde bir kaynak olmuş olur. Windows olay görüntüleyicisine “Denetim Masası – Yönetimsel Araçlar – Olay Görüntüleyicisi” yolundan ulaşabilirsiniz. Olay görüntüleyicine gözattığınızda 3 farklı log göreceksiniz Bilgi, Uyarı ve Hata türünde 3 farklı log türü bulunmaktadır bizde C# tarafında loglarımızı bilgi, uyarı ve hata olarak loglayabileceğiz.
Windows olay görüntüleyicine log atmak için System.Diagnostics namespace’i altında yer alan EventLog adlı sınıfı kullanacağız. Şimdi muratoner.net adında bir kaynak oluşturacağız ve altınada bir log atacağız böylelikle log atma işlemine giriş yapmış oluruz.
C#
Öncelikle namespace’i ekleyelim.
1 | using System.Diagnostics; |
CreateEventSource ve DeleteEventSource metodlarını kullandığımızda eğer alttaki hata ile karşılaşırsanız o zaman yapmanız gereken projenizin çıktısı olan exe’yi yönetici olarak çalıştırmak yada projeyi visual studio’da açarken visual studio’yu yönetici olarak çalıştırın böylelikle bu hata ile karşılaşmazsınız.
1 2 3 | An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll Additional information: Requested registry access is not allowed. |
Şimdi olay görüntüleyicisinde muratoner.net adında bir kaynak oluşturalım ve bu kaynak altına birer tane bilgi, uyarı ve hata türünde log atalım. Ama onun öncesinde muratoner.net adında bir kaynak oluşturalım. Kaynak oluşturmak için EventLog sınıf altındaki CreateEventSource metodunu kullanacağız ama bu metodu kullanmadan önce eğer aynı kaynak daha önce oluşturulmuş ise hata almamak için SourceExists metodu ile kontrol edeceğiz.
Kaynak oluşturma sonrasında windows olay görüntüleyicinde sol menüde “Uygulama ve Hizmet Günlükleri” menüsü altında girmiş olduğunuz kaynak adı yok ise windows olay görüntüleyicisi kapatıp tekrar açın.
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | using System; using System.Diagnostics; using System.Windows.Forms; namespace MHG.Windows.Event.Viewer { public partial class Form1 : Form { public Form1() { InitializeComponent(); cbOlayTuru.SelectedIndex = 0; } private void btnOlustur_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtOlayAdi.Text) && !string.IsNullOrEmpty(txtOlayKaynakAdi.Text)) { //Eğer muratoner.net adında bir kaynak yok ise oluşturulacak. if (!EventLog.SourceExists(txtOlayKaynakAdi.Text)) EventLog.CreateEventSource(txtOlayKaynakAdi.Text, txtOlayKaynakAdi.Text); EventLogEntryType logType = EventLogEntryType.Information; switch (cbOlayTuru.SelectedIndex) { case 1: logType = EventLogEntryType.Warning; break; case 2: logType = EventLogEntryType.Error; break; default: break; } //Logu yazıyoruz. EventLog.WriteEntry(txtOlayKaynakAdi.Text, txtOlayAdi.Text, logType); MessageBox.Show("Log yazıldı..."); } else MessageBox.Show("Log adı ve kaynağı boş geçemezsiniz."); } } } |
Şimdi masaüstü uygulamamızın ekran görüntüsüne gözatalım.
Kaynak ve log oluşturduktan sonra “Olay Görüntüleyicisi” görüntüsüne gözatalım.
- muratoner.net adındaki kaynağın oluşturulduğunu buradan görüyoruz.
- Information türündeki logumuz burada listeleniyor.
- Log mesajımızın detayıda burada yer alıyor.
Bu projenin son haline ve diğer tüm projelerime GitHub hesabımdaki “csharp” adlı repository’imden ulaşabilirsiniz GitHub linkim aşağıdadır.
C# GitHub Repository: https://github.com/muratoner/csharp/tree/master/MHG.Windows.Event.Viewer