22 Mayıs 2016 Pazar

MVC Projesi Üzerinde NLOG Kütüphanesi ile Loglama İşlemleri

Bu yazı içeriği aşağıdaki alt başlıkları içermektedir.

  • Loglama  nedir ?
  • Loglama neden yapılır ?
  • NLOG nedir ?
  • MVC projesinde NLOG kullanımı 

  Log kullanılan sistemde kullanıcının hareketlerini kayıt altına almamızı  sağlayan yapıdır.Kısacası Bir sistemin ayak izine LOG denir.

  Loglama küçük projelerden ziyade kurumsal büyük ölçekli projelerde kullanılması gereken sistem, yönetimi kolaylaştıran bir yapıdır.Ne zaman nerde nasıl hata alındı? , hata mesajının içeriğine göre çözümler üretme kolaylığı ,sistemin doğru bir şekilde çalışıp çalışmadığının izlenmesi gibi temel amaçları vardır.

  Bende bu yapıyı bir proje üzerinde sıfırdan kurulum yaparak göstermek istedim.Bunu ise .Net kütüphanesi olan NLOG kullanarak yapacağım.

Öncelikle Empty bir ASP.Net MVC projesi açıyoruz .
Şekil-1

















Ben projeyi Entity Framework CodeFirst ile oluşturdum .Eğer Entity Framework kullanmadan veritabanı tabloları ve kolonları oluşturmak isterseniz aşağıda resmini paylaştığım fotoğraftaki class adında bir tablo ve classın her bir propertylerine karşılık gelecek bir kolon adları oluşturup DbFirst yada klasik ADO.Net ile de loglama işlemlerini benzer bir şekilde yapabilirsiniz.
Şekil-2




CodeFirst ile yaptığım için Context klasörümüzede DbSet<Log> Logs olarak property oluşturuyoruz .






Yukarıda veritabanına kaydını yapacağımız log bilgileri için tanımlama yaptık .Her log'un bir id'si,mesaj içeriği,Log Level 'i bundan birazdan bahsedeceğim,kayıt tarihi,yığın takibi ve makina adı gibi özellikleri NLOG kütüphanesi sayesinde kolaylıkla çekebiliyoruz.

  NLOG ' da önemli olan Log Level konusuna değinmek istiyorum.NLOG ta seviye seviye hatalar derecesine göre ayrılmıştır

Şekil-3 Log Level


Yukarıdaki resimde Projede Log Level'ler ters sıralı bir biçimde sıralanmıştır.Örneğin  Fatal() projede  ölümcül hata olduğunda devreye girecektir.Trace() veya Debug() yazdığımızda ise hata olmasa dahi bilgi vermek amacı ile mesaj kaydı yapabileceğiz.Bunların detaylarına log ayarlarını yapacağımız yani hangi durumlarda neler veritabanımıza kayıt edilecek durumunu birazdan bahsediyor olacağım.

Şimdi veritabanımızı hazırladığımıza göre NLOG kütüphanesini projemize nasıl dahil edeceğiz bu adımlara geçelim.
  1.  References --Manage NuGet Packages--Browse kımından NLOG yazıp kütüphaneyi aratıyoruz çıkan sonuçlardan  ikisini indiriyoruz.
İ
Şekil-3 Browse NLOG


     2.Bu kütüphaneleri yüklediğimizde solution'a 2 adet dosya gelecektir.İlki NLOG.config ikincisi ise NLOG.xsd
Şekil-5
    3.Gelen NLOG.config dosyasına girerek projemiz için kullanılacak ayarları yapacağız.

Gelen sayfada 2 dikkat etmemiz gereken tag var birincisi targets tagıdır.Bu tag'ın altında hangi veritabanını kullanacağımız yani connection string'i,SQL veritabanına kayıt yapacak SQL command'ımızı ve Log tablomuzda yarattığımız alanları dolduracak paremetreleri yazıyoruz.


Şekil-6 Config ayarları


Bu sayfada henüz işimiz bitmedi sayfanın en altında bulunan <rules> tagının yorum satırlarını kaldırıyoruz.Rules tagında ise loglama kurallarımızı belirtiliyoruz minlevel attribute'na yukarıda yazmış olduğum Levellerin hangisinden başlanarak loglama yapılacağını yazıyoruz.Örneğin minlevel kısmına Fatal yazarsak altında bulunan leveldeki hiç bir hatayı veritabanına kaydetmemiş olacağız.Kısacası sadece ölümcül hataları loglayabileceğiz.Trace yada Debug 'ta bırakırsak minlevel'i  hem Fatal exceptionları hemde Debug içerisine yazacağımız mesajları Veritabanına kaydedecektir.
Sonrasında writeTo attribute'na ise Şekil-6 'te Log adını verdiğimiz target tag'ını yazıyoruz ,ve burada işimiz bitmiş oluyor artık gelelim kod kısmında nasıl kullanacağız.
Şekil-7 Rules

Benim projemde ürünleri listelerken ve hata aldığımızda çalışacak kodları yazmaya başlayabiliriz.Öncelikle açtığımız MVC projemize de bulunan UrunController içerisine class seviyesinde eklemiş olduğumuz NLOG kütüphanesinden Logger adında ki classtan bir instance alıyoruz .Burda instance alma işlemi new keyword'u ile değil birazdaha farklıdır .


Şekil-8 Instance
Artık kod içerisinde _logcu.Debug("Bilgi verilecek mesaj buraya"), _logcu.Error("Hata Mesajı") şeklince kullanmaya başlayabiliriz.
Öncelikle bilgi vermek amaçlı ürünler başarılı bir şekilde listelenmişse Debug içerisine mesajımızı yazıyoruz.Kod kısmı vede Sql çıktısı Şekil-9 ve Şekil-10 da gösterdim.


Şekil-9 Kod İçerisinde Kodlama



Şekil-10 Sql Çıktısı




Try içerisinde hata almak amacı ile string bir değeri integer'a çevirmeye çalıştım ve kod catch içerisine düşerek _logcu.Error() içerisindeki hatayı veritabanına kaydetti.

Şekil-11 Error Log bilgisi alınan kod bloğu

Şekil-12 Veritabanına Kaydedilen Error Log Bilgisi

NOT:Yukarıdaki kod bloğunda  debug ve error loglarını aldık eğer NLOG.config içerisine girerek minlevel 'e Debug'ın üstünde bir seviye tanımlanırsa  örneğin WARN artık veritabanımıza WARN seviyesi aşağısındaki log kayıtları listelenmeyecektir.



Okuduğunuz için Teşekkürler , Sonraki yazılarımda görüşmek üzere :)


4 yorum:

  1. Eline sağlık hocam teşekkür ederim .

    YanıtlaSil
  2. Teşekkürler Ahmet Bey. Çok işime yaradı.İyi çalışmalar dilerim.

    YanıtlaSil
  3. herşeyin altına log yazacağız biraz zorlu bir iş bence. Bunu bir class ile veritabanına yazarakta yapılabilir. Kullanıcı ve sistemi herşeyiyle loglayacak bir yöntem biliyormusunuz ahmet bey

    YanıtlaSil
  4. Bu yorum yazar tarafından silindi.

    YanıtlaSil