Makale Özeti

Önceki yazımıza devam ediyoruz

Makale

Namespace tehlike.logcu

Public Class XMLSaglayici

Inherits SaglayiciTaban

Private XmlDosyasi As String 'XML dosyamızın adresini burada tutalım

Private dt As DataTable 'XMl dosyalarını yaratmak/xml dosyalarına ek yapmak için Datatable kullanacağız

Private xmlSchemaDosyasi As String

Public Overrides Sub Initialize(ByVal ad As String, ByVal config As System.Collections.Specialized.NameValueCollection)

If ad Is Nothing Or ad = "" Then ad = "xmlsaglayici"

XmlDosyasi = config("xmldosyasi") 'Sağlayıcı lstemizden ilgili sağlayıcımızın xmldosyasi değerini alıyoruz

xmlSchemaDosyasi = config("xmlschemadosyasi") 'Schemayı alıyoruz

If (String.IsNullOrEmpty(Me.XmlDosyasi)) Then 'Eğer özellik  belirtilmediyse hata fırlatıyoruz

    Throw New Exception("XML dosyası yolu belirtilmemiş")

End If

MyBase.Initialize(ad, config)

dt = New DataTable(ad)

Try

dt.ReadXml(Me.XmlDosyasi) 'XML dosyamızı okuyoruz ve datatable a atıyoruz

dt.ReadXmlSchema(Me.xmlSchemaDosyasi.ToString) 'XML dosyamızdan gelen verilerin tiplerini almak için schemayı da alıyourz

Catch ex As Exception

dt = New DataTable(saglayiciadi) 'Eğer xml okurken hata oluşuyorsa biz de yenisini oluşturuyoruz. Ve aşağıda gerekli alanların tanımlamalarını yapıyoruz

dt.Columns.Add("fldID", Type.GetType("System.Int32"))

dt.Columns.Add("fldTarih", Type.GetType("System.DateTime"))

dt.Columns.Add("fldUygulama", Type.GetType("System.String"))

dt.Columns.Add("fldLogSaglayici", Type.GetType("System.String"))

dt.Columns.Add("fldTur", Type.GetType("System.String"))

dt.Columns.Add("fldMesaj", Type.GetType("System.String"))

dt.Columns.Add("fldEkBilgi", Type.GetType("System.String"))

Dim dc As DataColumn = dt.Columns("fldID")

dc.AutoIncrement = True

dc.AutoIncrementSeed = 1

dc.AutoIncrementStep = 1

dc = dt.Columns("fldEkBilgi")

dc.AllowDBNull = True

End Try

End Sub

Public Overloads Overrides Sub Log(ByVal mesaj As String, Optional ByVal tip As String = "Uyarı", Optional ByVal ekbilgi As NameValueCollection = Nothing) 'yine bir yönlendirme yapıyoruz

    loguyaz(mesaj, tip, ekbilgi)

End Sub

Public Overloads Overrides Sub Log(ByVal except As System.Exception, Optional ByVal ekbilgi As NameValueCollection = Nothing) 'Burada da bir yönlendirme yağacağız

Dim msj As StringBuilder = New StringBuilder()

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

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

loguyaz(msj.ToString, "Hata", ekbilgi)

End Sub

Private Sub loguyaz(ByVal mesaj As String, ByVal tip As String, Optional ByVal ekbilgi As NameValueCollection = Nothing)

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 'Yine gerekli görevlerde çalışması için kodu koyuyoruz

Dim dr As DataRow = dt.NewRow

dr("fldTarih") = DateTime.Now

dr("fldUygulama") = Me.uygulamaadi

dr("fldLogSaglayici") = Me.saglayiciadi

dr("fldTur") = tip

dr("fldMesaj") = mesaj

If Not ekbilgi Is Nothing Then

Dim msj As New StringBuilder

msj.AppendLine("Ek bilgi")

Dim i As Integer

For i = 0 To ekbilgi.Count - 1

msj.Append(ekbilgi.Keys(i)).Append(": ").AppendLine(ekbilgi(i))

Next

dr("fldEkBilgi") = msj.ToString

End If

dt.Rows.Add(dr)

dt.WriteXml(XmlDosyasi)'XML e yazıyoruz ve sağlayıcımız bitiyor:)

End Sub

End Class

End Namespace
 

Dosyayı clsXMLSaglayici.vb olarak kaydedin

Evet bu sağlayıcı ile xml dosyasını açmaya çalıştık açamadığımızda yenisini yarattık

 

Şimdi de EventLog sağlayıcımızı yazalım:)

Imports System

Imports System.Collections

Imports System.Collections.Specialized

Imports System.Web.Configuration

Imports System.Web

Imports System.Configuration

Imports System.Configuration.Provider

Imports System.text

Imports System.io

Namespace tehlike.logcu

Public Class EventLogSaglayici

Inherits SaglayiciTaban

Private logDosyasi As String

Public Overrides Sub Initialize(ByVal ad As String, ByVal config As System.Collections.Specialized.NameValueCollection)

If Not String.IsNullOrEmpty(ad) = False Then saglayiciadi = ad

MyBase.Initialize(saglayiciadi, config)

End Sub

 

Public Overloads Overrides Sub Log(ByVal mesaj As String, Optional ByVal tip As String = "Uyarı", Optional ByVal ekbilgi As NameValueCollection = Nothing)

logudosyayayaz(mesaj, tip, ekbilgi)

End Sub

Public Overloads Overrides Sub Log(ByVal except As System.Exception, Optional ByVal ekbilgi As NameValueCollection = Nothing)

Dim msj As StringBuilder = New StringBuilder()

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

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

logudosyayayaz(msj.ToString, "Hata", ekbilgi)

End Sub

Private Sub logudosyayayaz(ByVal mesaj As String, ByVal tip As String, Optional ByVal ekbilgi As NameValueCollection = Nothing)

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.Append("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))

Next

End If

Dim EventLogAdi As String = "Hata"

If (Not EventLog.SourceExists(EventLogAdi)) Then

EventLog.CreateEventSource(EventLogAdi, EventLogAdi)

End If

Dim Log As New EventLog()

Log.Source = EventLogAdi

Log.WriteEntry(EventLogAdi, EventLogEntryType.Error)

End Sub

End Class

End Namespace

 

clsEventLog.vb olarak kaydedelim

 

Evet 2 sağlayıcı daha ekledik.. Son makalemizde işin en önemli kısmını yapacağız:)

 

Tuna TOKSÖZ