Makale Özeti

Önceki yazımıza devam ediyoruz

Makale

Imports System.Collections.Specialized

Imports System.Web.Configuration

Imports System.Web

Imports System.Configuration

Imports System.Configuration.Provider

Namespace tehlike.logcu

Public Class LogYonetim

Private Shared pcProviders As ProviderCollection

Private Shared boolInitialized As Boolean

Private Shared boolAcikmi As Boolean

Private Shared lybayar As LogYonetimBolumu

Private Shared objimplock As Object

Public Sub New() 'sınıfımız tnımlandığında çalışır

LogYonetim.pcProviders = New ProviderCollection() 'Web.configden gelen liste provider collection tipinde

LogYonetim.boolInitialized = False 'initialized subını birden çok defa çağırmamak için böyle bir değişken kullanıyoruz

objimplock = New Object()

End Sub

private Shared Sub initialize()

If LogYonetim.boolInitialized Then Exit Sub Eğer daha önce sub çağırıldıysa çıkıyoruz. Gereksiz yere yormayalım

 

lybayar = ConfigurationManager.GetSection("log") 'web.config dosyamızdan log bölümümüzü alıyoruz

If Not lybayar Is Nothing Then 'Eğer böyle bir section varsa gerekli parametreleri ayarlıyoruz

LogYonetim.lybayar = lybayar

LogYonetim.boolAcikmi = lybayar.acik

Else

LogYonetim.boolAcikmi = False 'Eğer section yoksa özelliği kapatıyoruz böylece çalışmıyor logcumuz

End If

If LogYonetim.boolAcikmi Then Eğer üstteki açık aşamasını geçtiyse devam edelim

    LogYonetim.pcProviders = New ProviderCollection 'Sağlayıcılarımızın listesini yaratıyoruz

    ProvidersHelper.InstantiateProviders(lybayar.saglayicilar, LogYonetim.pcProviders, GetType(SaglayiciTaban))

    LogYonetim.pcProviders.SetReadOnly() 'Read only özelliğini false yapıyoruz.. Bölyece programatik oalrak değer yazmayı engelliyoruz.. Bunu yaptıktan sonra daha önce yazdığımız propertyler geçersiz hale geliyor:)

End If

LogYonetim.boolInitialized = True

End Sub

Public Shared Sub log(ByVal mesaj As String, Optional ByVal tip As String = "Uyarı", Optional ByVal ekveri As NameValueCollection = Nothing)

LogYonetim.logla(mesaj, tip, ekveri)

End Sub

Public Shared Sub log(ByVal except As Exception, Optional ByVal ekveri As NameValueCollection = Nothing)

LogYonetim.logla(except, ekveri)

End Sub

Private Shared Sub logla(ByVal mesaj As String, Optional ByVal tip As String = "Uyarı", Optional ByVal ekveri As NameValueCollection = Nothing)

LogYonetim.initialize()

Dim saglayici As SaglayiciTaban

For Each saglayici In LogYonetim.pcProviders

If saglayici.acik Then

saglayici.Log(mesaj, tip, ekveri)

End If

Next

End Sub

Private Shared Sub logla(ByVal except As Exception, Optional ByVal ekveri As NameValueCollection = Nothing)

LogYonetim.initialize()

Dim saglayici As SaglayiciTaban

For Each saglayici In LogYonetim.pcProviders pcProviders listesi içindeki tüm providerlara gerekli log işlemini yapmaları için komut veriyoruz

If saglayici.acik Then

saglayici.Log(except, ekveri)

End If

Next

End Sub

 

End Class

End Namespace

 

Bu dosyayı clsLogYonetim.vb oalrak kaydediyoruz. Sonra kodumuzu derliyoruz ve yeni bir proje açıyoruz. Solutions penceresinden projemize sağ tıklayıp yeni referans ekle deyip az önce yarattığımız dll yi seçiyoruz...

 

Gelelim web.config dosyamıza.

 

<?xml version="1.0"?>

<!--

Note: As an alternative to hand editing this file you can use the

web admin tool to configure settings for your application. Use

the Website->Asp.Net Configuration option in Visual Studio.

A full list of settings and comments can be found in

machine.config.comments usually located in

\Windows\Microsoft.Net\Framework\v2.x\Config

-->

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

<!--

Sections bölümünü web.config dosyanızın en üstüne yazmalıyız. Aksi takdirde bize hata mesajı veriyor.

-->

<configSections>

<section name="log" type="logcu.tehlike.logcu.LogYonetimBolumu"/>

<!--

Log için kullanacağımız sectionu belirttik.. Buradaki adı değiştirdiğimiz taktirde koddaki adı da değiştirmelisiniz... Ayrıca buradaki ve bundan sonraki type'lar Case sensitive'dir. Büyük olan bir harfi küçük bir şekilde yazsak bile hata verir

-->

</configSections>

<appSettings/>

<connectionStrings/>

<log acik="true">

<saglayicilar>

<add name="saglayiciadim" type="logcu.tehlike.logcu.XMLSaglayici" acik="true" hata="true" uyari="true" basari="true" xmldosyasi="c:\hata.xml" xmlschemadosyasi="c:\hata.xsd"></add>

<add name="saglayiciadim2" type="logcu.tehlike.logcu.TxtSaglayici" acik="true" hata="true" uyari="true" basari="true" logdosyasi="c:\hata.log"></add>

</saglayicilar>

</log>

<system.web>

<!--

Set compilation debug="true" to insert debugging

symbols into the compiled page. Because this

affects performance, set this value to true only

during development.

-->

<compilation debug="true"/>

<!--

The <authentication> section enables configuration

of the security authentication mode used by

ASP.NET to identify an incoming user.

-->

<authentication mode="Windows"/>

<!--

The <customErrors> section enables configuration

of what to do if/when an unhandled error occurs

during the execution of a request. Specifically,

it enables developers to configure html error pages

to be displayed in place of a error stack trace.

<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">

<error statusCode="403" redirect="NoAccess.htm"/>

<error statusCode="404" redirect="FileNotFound.htm"/>

</customErrors>

-->

</system.web>

</configuration>

 

Bu şekilde ayarladıktan sonra default.aspx e geçelim

Imports logcu.tehlike.logcu 'İşte dediğim komik yer burası. logcu.tehlike.logcu şeklinde salak bir kullanımımız oluyor

Partial Class _Default

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim ekbil As New NameValueCollection

ekbil ("ip") = request.servervariables("REMOTE_ADDR")

LogYonetim.log("Deneme Hatası", "hata", ekbil )

End Sub

End Class

 

 

Tuna TOKSÖZ