Web uygulamalarımızı yaparken tüm kontrol elimizde olsun isteriz. Kontrol etmek istediğimiz noktalardan birisi de süreç işlerken oluşan hataların neler olduğudur. Yani bir kullanıcı sistemde işlem yaparken bir hata ile karşılaştığında işleminin neden yarıda kesildiğinden haberdar olmak isteriz. Yazdığımız kodlardaki bug’lar olsun, sunucu kaynaklı sorunlar olsun sorunun ne olduğu, ne zaman meydana geldiği hatta hangi kullanıcının bu sorunu yaşadığı kaydedip incelemek istediğimiz durumlardır.
Bu noktada yazılmış hata yöneticilerinden biri de ELMAH (Error Logging Modules and Handlers) kütüphanesidir. Bu kütüphane süreç işlerken oluşan hataları detaylı olarak kaydeder.
Oluşan Log kayıtlarını birçok ortamda depolayabiliriz. Bu depolama ortamları:
- Microsoft SQL Server
- Oracle (OracleErrorLog)
- SQLite (version 3) database dosyası
- Microsoft Access (AccessErrorLog)
- XML dosyaları
- RAM (hafızada)
- SQL Server Compact Edition
- MySQL
- PostgreSQL
Burada dikkat etmemiz gereken noktalardan biri oluşan hata loglarını nereye kaydedeceğimizi belirlemektir. Biz kayıtları XML dosyada tutacağız.
ASP.NET MVC projesine ELMAH kütüphanesini dahil etmek için Nuget Package Manager eklentisini kullanıyor olacağız.
Package Manager Console açarak Install-Package elmah.xml komutunu giriyoruz. Kurulum otomatik olarak gerçekleşiyor. Web.config dosyası içerisinde ayarlamalar otomatik olarak yapılıyor. Hata kayıtlarının nerede tutulacağını belirleyen kısım ise aşağıdaki gibidir.
<elmah> <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" /> </elmah>
Yükleme işlemi gerçekleştikten sonra HomeController içersine About adında bir index belirliyoruz ve bu metodun hata fırlatmasını sağlıyoruz.
http://localhost:1735/Home/About şeklinde çağırdığımızda meşur sarı hata sayfasıyla karşılaşıyoruz. (1735 portu kendi makinamın verdiği port numarası, sizin denemenizde bu numara farklı olabilir.)
Bu hata kaydı App_Data/Elmah.Errors dizininde XML dosya içersine kaydedilmiş olacak. Hata kaydını görmek için http://localhost:1735/elmah.axd yoluna bakıyoruz ve aşağıdaki şekilde başarılı sonuca ulaşmış oluyoruz.