7/11/2009

Asenkron Logging Application Block

Enterprise Library(EL)'i ile loglama yapacaz ama bunun asenkron olmasını istiyoruz diyorsanız Microsoft da size malesef diyor. Esasında forumlarda araştırdığım kadarıyla da asenkron loglama yapmak yerine msmq trace listener'ını kullanın demişler. Bizim durumumuza pek uymuyordu.


Bunun için kendim asenkron olarak çalışacak bir CustomTraceListener oluşturdum. Yalnız sonradan düşen jeton bana birşeyi hatırlattı. Şayet asenkron loglamada herhangi bir hata oluşursa, Logging Application özel kaynaklarından olan Logging Error ayarları ile belirttiğiniz strateji çalışmıyor (asenkron istek için AsyncResult metodunda loglama sırasında oluşan hatayı bu amaçla throw etmiştim CustomTraceListener sınıfımda) ve loglama hatası uygulamayı patlatıyordu. Bu arada loglaması hatalı sonuçlanan log kaydını da kaybediyorduk. CustomTraceListener'da asenkron çağrılar yapmaktan vazgeçtim.


Sonraki denemem Logger sınıfını asenkron olarak çalıştıracak bir proxy oluşturdum. Artık Logger sınıfının Write metodunu ve 18 overload'ı asenkron olarak çağırıyorum. 4.o versiyonu ile kendi trace listener'ıma yaptığım testler olumlu geçti.

Hiç yorum yok: