Makale Özeti

Önceki yazımıza devam ediyoruz

Makale

Şimdi ilk sağlayıcımızı(provider) yazalım... Daha sonra ikincisini yazacağız.

 

Imports System

Imports System.Collections

Imports System.Collections.Specialized

Imports System.Web.Configuration

Imports System.Web

Imports System.Configuration

Imports System.Configuration.Provider 'Web.config dosyasını alabilmemizi sağlayan aduzayı

Imports System.text

Imports System.io 'text dosyası yazabilmek için kullanacağımız aduzayı

Namespace tehlike.logcu

    Public Class TxtSaglayici

        Inherits SaglayiciTaban

        Private logDosyasi As String

        Public Overrides Sub Initialize(ByVal ad As String, ByVal config As System.Collections.Specialized.NameValueCollection) 'Taban sınıfımız olan SaglayiciTaban'ın initialize metodu yerine tanımladığımız metod.

            If ad Is Nothing Or ad = "" Then ad = "txtsaglayici" 'Eğer sağlayıcımızın adı girilmediyse(ki bu imkansız, sonradan farkettim adını girmediğimizde bize hata veriyor

          logDosyasi = config("logdosyasi") 'Log dosyamızı web.config de saglayicilar biriminin altında tanımlıyoruz.. Bu tanımlamaları makale dizimizin en sonunda göreceksiniz

            If (String.IsNullOrEmpty(Me.logDosyasi)) Then 'Eğer log dosyası belirtilmediyse hata fırlatıyoruz

                Throw New Exception("LogTXT dosyası belirtilmemiş")

            End If

            MyBase.Initialize(ad, config) 'Ve taban sınıfımızdaki initiallize metodunu tekrar çağırıyoruz ki gelen verilere göre açık kapalı gibi durumları algılayabilelim

        End Sub

 

       Public Overloads Overrides Sub Log(ByVal mesaj As String, Optional ByVal tip As String = "Uyarı", Optional ByVal ekbilgi As NameValueCollection = Nothing) 'metodu log("hata çıktı","hata",ekveriler) tarzı çağırdığımızda çalışacak olan metodumuz

          logudosyayayaz(mesaj, tip, ekbilgi) 'Başka bir metoda yönlendiriyoruz

        End Sub

        Public Overloads Overrides Sub Log(ByVal except As System.Exception, Optional ByVal ekbilgi As NameValueCollection = Nothing) 'Metodumuza hata mesajı yerine hatanın kendisini(exception) fırlattığımızda bu metod devreye girecek

            Dim msj As StringBuilder = New StringBuilder() 'Çok sayıda değişkeni birleştireceğimiz için stringbuilderımızı kullanıyoruz

            msj.Append("Exception: ").AppendLine(except.ToString())

            msj.Append("Stack trace: ").AppendLine(except.StackTrace)

            msj.Append("Source: ").AppendLine(except.Source)

            msj.Append("Message: ").AppendLine(except.Message)

            logudosyayayaz(msj.ToString, "Hata", ekbilgi) 'Gelen exceptionun türü zaten hata'dır.. Yani exception bir hata sonucu fırlatılır.. O yüzden metodumuzun parametre listesine yazma gereği duymadık

        End Sub

        Private Sub logudosyayayaz(ByVal mesaj As String, ByVal tip As String, Optional ByVal ekbilgi As NameValueCollection = Nothing) 'Logu dosyaya yazmak için çağırılacak olan metodumuz

            If Not (tip = "hata" And Me.hata = True) Or (tip = "basari" And Me.basari = True) Or (tip = "uyari" And Me.uyari = True) Then Exit Sub 'İşte burada ilgili sağlayıcının ilgili durumlarda çalışmasını sağlıyoruz. Tip hata ise hata="true"olan sağlayıcıları çalıştırıyoruz gibi.

            Dim msj As New StringBuilder

          msj.Append("Tarih: ").AppendLine(DateTime.Now.ToString())

          msj.Append("Uygulama: ").AppendLine(uygulamaadi)

          msj.Append("LogSaglayici: ").AppendLine(saglayiciadi)

          msj.Append("Tür: ").AppendLine(tip)

          msj.Append("Mesaj: ").AppendLine(mesaj)

          msj.AppendLine("Ek bilgi")

             If Not ekbilgi Is Nothing Then

                Dim i As Integer

                For i = 0 To ekbilgi.Count - 1

                msj.Append(ekbilgi.Keys(i)).Append(": ").AppendLine(ekbilgi(i)) 'Gelen ekbilgiler namevaluecollection tarzında... Bunu altalta string biçimidnde ekliyoruz

                Next

            End If

          msj.AppendLine()

            Dim txtyaz As StreamWriter = File.AppendText(Me.logDosyasi)

          txtyaz.Write(msj.ToString)

          txtyaz.Close()

        End Sub

    End Class

End Namespace

 

Dosyamızı clsTXTSaglayici.vb olarak kaydedin

İlk sağlayıcımızı yarattık. Bu sağlayıcımız gönderdiğimiz verielri altalta yazıp txt dosyası olarak kaydediyor.

 

İkinci sağlayıcımızı da bir sonraki makalede yapalım:) Sağlayıcımız XML sağlayıcısı olacak.. Yanına EventLog sağlayıcısı koyma ihtimalim de var:)

 

Tuna TOKSÖZ