- 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 |
Ş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.
- 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 |
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 :)











Eline sağlık hocam teşekkür ederim .
YanıtlaSilTeşekkürler Ahmet Bey. Çok işime yaradı.İyi çalışmalar dilerim.
YanıtlaSilherş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ıtlaSilBu yorum yazar tarafından silindi.
YanıtlaSil