Exception Logger Middleware ve Request Logging

.Net projelerinde hataların yakalanması ve loglanması

Adem Catamak
2 min readNov 1, 2022

You can access the English version via this link.

.Net Core ve .Net proje yapısında en çok dikkat çeken bileşenlerden biri middleware yapısıdır. Bu yapı bir istek geldiğinde controller’a ulaşmadan önce veya controller’dan çıkan cevabın istemciye ulaşmasından önce istediğimiz işlemleri yapabilmemizi sağlamaktadır. Kısacası interceptor davranışında bulunduğunu söyleyebiliriz. Bu davranışı sayesinde middleware bileşeni; ön bellekleme, erişim izin yönetimi, hata yönetimi gibi farklı işlemlerin yapılabileceği ideal nokta haline gelmektedir.

Oluşan hataları tek bir noktada yakalayıp, istek ile beraber nasıl kayıt altına alabileceğimize bu yazı içerisinde değineceğiz.

Photo by Raghavendra Saralaya on Unsplash

ExceptionLoggerMiddleware

Öncelikle middleware yapısına uygun olarak sınıfımızı oluşturuyoruz.

1- Yapıcı metot üzerinden uyandıracağımız bir sonraki objeyi (RequestDelegate) next adıyla elde ediyoruz.

2- Invoke metodu içerisinde bir sonraki bileşene isteği iletecek şekilde kodumuzu yazıyoruz.

3- Uygulama ayarlarımızı yaptığımız yerde de sınıfımızı sisteme dahil ediyoruz.

Şu anki haliyle Invoke metoduna break-point koyabilirsiniz. Projenize gelen her istekte kodunuzun bu break-point’e gelince duracağını görebilirsiniz.

Şimdi artık sınıfımızın yapması gereken işlemleri kodlamaya başlayabiliriz.

1- Hataları yakalayabilmek adına _next objesini çağırdığımız kısmı try-catch bloğu içerisine alarak işe başlıyoruz.

2- httpContext.Request şeklinde eriştiğimiz istek objesi bir kere okunabilecek şekildedir. Hata oluşması durumunda, hataya sebep olan httpContext.Request objesi içerisindeki bazı verileri loglamak için bu objeyi tekrar okumak istiyoruz. Bunu sağlayabilmek için EnableBuffering metodunu kullanmamız gerekmektedir.

1- HandleAsync metodu içerisinde önce isteğin text halini elde ediyoruz. Ardından hata ile birlikte bu text değerini hata günlüğümüze kaydediyoruz.

2- RequestAsTextAsync metodu içerisinde isteğimize ait (örnek olması açısından URL değeri, başlık bilgisi ve istek gövdesi) bilgileri bir araya getirilmiştir.

3- GetRawBodyAsync metodu içerisinde öncelikli olarak istek gövdesini baştan okuyabilmek adına imleç pozisyonunu 0 değerine çekiyoruz. Ardından StreamReader tipinden bir obje oluşturuyoruz. Bu obje aracılığı ile istek gövdesini okuyoruz. Ardından imleci tekrar istek gövdesinin başına getiriyoruz. Son olarak da okuduğumuz istek gövdesi bilgisini geri gönderiyoruz.

ExceptionLoggerMiddleware sınıfının son haline şu link aracılığıyla ulaşabilirsiniz. Bir diğer yazıda; kayıt altına aldığımız verilerin içerisinde yer alan telefon numarası, email, şifre gibi kritik bilgilerin maskelenmesinin nasıl yapılabileceğine bakacağız.

Umarım yararlı bir yazı olmuştur. Diğer yazılarıma göz atmak için bu linke tıklayabilirsiniz.

--

--