KMRT BSRN

"Hiç kimsenin ilgisine ihtiyaç duymadığın gün olgunlaşırsın. Hiç kimseden beklentiye girmediğin gün yara almazsın. Ve hiç kimseye bağımlı kalmazsan kazanırsın." OSHO

VB,CS – Baştan Sona Loglama (Logging)

Yorum bırakın


Uygulama geliştirirken ya da geliştirdikten sonra en çok gerek duyduğumuz işlem sağlıklı bir hata loglama yapısıdır. Çünkü bu işlem uygulamayı Test ortamından tutunda canlı ortama kadar ve hatta uygulamanın hayatı boyunca ihtiyaç duyulacak en önemli kısımdır.

Uygulamanın aktardığınız ortamda ilk açılışından kaldırılıncaya kadar her zaman sağlıklı bir hata loglama ile oluşan hataların ve sorunların elinize geçmesi çok önemli ve hayat kurtarıcıdır. Genelde aktarılan ortamda uygulama ilk aktarıldığında biraz nazlı olur 🙂 Tabii bu naz uygulamanın çalışmasını zorlaştırır. 🙂 İşte bu durumlarda sağlıklı bir hata loglama yapısı yoksa hatayı bulmak ölümcül zaman kayıplarına neden olabilir. Hatta genelde öldürür !! 🙂 Aynı za

man da uygulama çalıştığı süre boyunca yani hayatı boyunca kullanıcıların sebep olduğu veya olmadığı her türlü hatanın yakalanması, kaydedilmesi(hata loglama), bilgi kaydedilmesi(loglama), izlenebilmesi vs. Sizi köşeye sıkışacağınız bir anda kurtarıcı bir kapınız olmasını sağlayacaktır. Yoksa kullanıcının makinasındaki uygulamayı debug etmeyi mi düşünüyordunuz.. 🙂 Bir silah alıp kafanıza sıkın daha rahat olur.. :))

Neyse sözü uzatmadan bu işlemlerde elimizde ki silahları sizinle paylaşmak istiyorum. Tabii ki olayımız çok açık ve seçik olarak en az kodla bu işi nasıl yaparız. 🙂 Hatta mümkünse hiç kod yazmasak süper  olmaz mı !? :)) Bence müthiş olur..

Bizi kurtaracak dosyamızın adı; App.config

Bu dosya içinde yapacağımız loglama ayarları ile uygulamamızda bir tek satırda loglama işlemini halledebiliriz. Sadece hata loglama değil, uygulama içinde herhangi bir anda kayıt altına alınmasını istediğimiz verileri bile bu şekilde kaydedebiliriz.

MSDN ‘den araştırdığım sayfalar sonucunda şu şekilde App.config dosyasını düzenledim.

App.config dosyasında ki “configuration” bölümü altında “system.diagnostics” altında “sources” , “switches” , “sharedListeners” kısımlarından oluşmaktadır. Burada “sources” kısmında loglama yapıları kısa bir tanımlama yapılmaktadır. “sharedListeners” kısmında ise “sources” kısmında tanımlanan her “source” için ayrıntılar belirtilmektedir.

VB projelerinde, projemize bir App.config dosyası eklediğimizde, bu kısımlar otomatik olarak oluşmaktadır. Fakat sadece “FileLog” seçeneği gelmektedir. Fakat MSDN araştırmam sonucunda diğerlerini de yazdım.

CS projelerinde, projemize bir App.config dosyası eklediğimizde, bu kısımların hiçbiri ama hiçbiri ama ama hiçbiri gelmiyor. Fakat VB projesinde oluşan kodları aynen kopyalayabilirsiniz..

Her bir loglama yapısını açıklama yazıları ile belirttim. Her bir “sources” için detaylarının olduğu “sharedListeners” alanında “log dosyasının oluşturulacağı konumu” ve diğer ayarlarını görebilir ve değiştirebilirsiniz..

<configuration>
  <system.diagnostics>
    <sources>
      <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
          <add name="FileLog"/>
          <add name="EventLog"/>
          <add name="FileLogListener" />
          <add name="Delimited" />
          <add name="XmlWriter" />
          <add name="Console" />
        </listeners>
      </source>
    </sources>

    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>

    <sharedListeners>
                       <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"initializeData="FileLogWriter"/>

      <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="ApplicationEventsVB"/>

                       <add name="FileLogListener" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"initializeData="FileLogListenerWriter" location="Custom" customlocation="C:\VB\\cf0 " />

                       <add name="Delimited" type="System.Diagnostics.DelimitedListTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="C:\VB\ApplicationEvents.txt" delimiter=";"traceOutputOptions="DateTime" />

      <add name="XmlWriter" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0,                  Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="C:\VB\ApplicationEvents.xml" />
      <add name="Console" type="System.Diagnostics.ConsoleTraceListener, System, Version=2.0.0.0,                  Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="true" />
    </sharedListeners>
  </system.diagnostics>
</configuration>

Bu loglama seçeneklerinden uygulanmasını istemediklerinizi “açıklama” satırı yapmanız yeterlidir.

Aktif olanların hepsi sırası ile uygulanacaktır..

Bu işlemlerden sonra uygulama kodunuz içinde herhangi bir yerde ki özellikle “Try..Catch” bloğu içinde yada bilgi kaydedilmesini istediğiniz bir yerde aşağıdaki kodu yazarak ve diğer “aşırı yüklenmiş (overload)” versiyonlarına bakarak işlem yapabilirsiniz..

VB Projelerinde;

My.Application.Log” nesnesini kullanarak App.config içinde aktifleştirdiğimiz loglama yapılarının sırasıyla gerçekleşmesini sağlamış oluruz..

My.Application.Log.WriteException(New Exception("Bu bir hata mesaj?d?r.."))
My.Application.Log.WriteEntry("Bu bir bilgi kaydetme i?lemidir..")

CS Projelerinde;

Ufak bir işlem ile aynı nesneyi kullanabiliriz… “App.config” dosyamız VB projesindekinin aynısı olacaktır. Ardından projemize “References” kısmında “Microsoft.VisualBasic” referansını projemize eklememiz yeterlidir.

image

image

image

Bu işlemlerden sonra kodumuz aşağıdaki gibidir..

Microsoft.VisualBasic.Logging.Log log = new Microsoft.VisualBasic.Logging.Log();
log.WriteException(new Exception("Bu bir deneme hatas?d?r."));
log.WriteEntry("Bu bir deneme bilgisidir..");

LOGLAMA ÖRNEKLERİ..

XML Loglama..

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
  <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
    <EventID>0</EventID>
    <Type>3</Type>
    <SubType Name="Information">0</SubType>
    <Level>8</Level>
    <TimeCreated SystemTime="2010-03-28T15:28:24.0563348Z" />
    <Source Name="DefaultSource" />
    <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
    <Execution ProcessName="ApplicationEventsVB.vshost" ProcessID="4216" ThreadID="10" />
    <Channel/>
    <Computer>BILMEMNEPC</Computer>
  </System>
  <ApplicationData>Bu bir test hatas?d?r.</ApplicationData>
</E2ETraceEvent>

Delimited loglama..

"DefaultSource";;;Information;;;0;;;"Deneme99";;;;;;;;;;;;;;;"2010-03-28T15:26:29.0977595Z";;;;;; "DefaultSource" ||| Information ||| 0 ||| "Deneme99" ||| ||| ||| ||| ||| "2010-03-28T15:28:24.0563348Z" ||| |||

Konuyla ilgili MSDN sayfaları;

http://msdn.microsoft.com/en-us/library/5cz98azz(VS.80).aspx
http://msdn.microsoft.com/en-us/library/xbw77c0x(VS.80).aspx
http://msdn.microsoft.com/en-us/library/3tbf1bh0(VS.80).aspx
http://msdn.microsoft.com/en-us/library/7fx0fexe(VS.80).aspx
http://msdn.microsoft.com/en-us/library/f9shkfdd(VS.80).aspx
http://msdn.microsoft.com/en-us/library/12xxftw2(VS.80).aspx
Reklamlar

Yazar: K. Murat BAŞEREN, MBA, MCP

I am a senior software developer, MCP, consultant, blogger, former chemist and software trainer. My interests range from software developer to technology. I am also interested in web development, education, and coffee.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s