ben

OMÜ , Bilgisayar Mühendisliği, 13'

25 Ocak 2013 Cuma

Log4net kullanımı


UdpAppender


    Tek bir config dosyasıyla tüm katmanları kontrol edebilmek için, öncelikle config dosyası açıp ve aşağıdaki kodları yazmalıyız.

?xml version="1.0" encoding="utf-8"?>
<configuration>
     <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
     </startup>
     <configSections>
          <section name="log4net" 
              type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
     </configSections>
     <log4net>
          <logger name="Görüntü.ViewModel.DenemeViewModel">
                 <appender-ref ref="UdpAppender" />
         </logger>
         <logger name="Görüntü.ViewModel.AdminViewModel">
                 <appender-ref ref="UdpAppender" />
         </logger>
         <logger name="Görüntü.ViewModel.Deneme2ViewModel">
                 <appender-ref ref="UdpAppender" />
         </logger>
         <root>
                 <level value="ALL" />
          </root>
         <appender name="UdpAppender" type="log4net.Appender.UdpAppender">
              <param name="RemoteAddress" value="127.0.0.1" />
              <param name="RemotePort" value="8080" />
              <layout type="log4net.Layout.XmlLayoutSchemaLog4j, log4net" />
         </appender>
</log4net>


  Yukarıdaki logger tagları içerisinde yazılı olan name' lerde loglama yapılacak olan sayfa(class)da bizim tanımladığımız isim yazılır ve class'tan loglama bu isim ile çağrılır.Hatanın nerede oluştuğunu daha rahat görebilmek için classın namespaces'ini vermek daha iyi olur. yukarıda yazılı config dosyasını ismi log4net.config olarak kaydedelim.

     Hata oluşabilecek projeye log4net.dll referance olarak eklendikten sonra, sınıflarda aşağıdaki tanımlamalar yapılır.
      static ILog log = LogManager.GetLogger("Görüntü.ViewModel.DenemeViewModel");

Hata oluşabilecek kodların arasına;
    try
    { //kodlar}
     catch
     {
        log4net.Config.XmlConfigurator.Configure(ResourcesFiles.Log4net());
        log.Error("Girilen barkod eksik yada hatalı!");
     }

   Burada ResourcesFiles.Log4net() koduyla projemize gömdüğümüz log4net.config dosyasını çağırıyoruz. Projeye config dosyasının gömülü olmama durumunda ise config dosyasının derlenebilmesi için projenin app.config dosyasına aşağıdaki kodu eklememiz ve yukarıdaki kodda bir kaç değişiklik yapmamız gerekir. Projeye gömülü ise app.config dosyalarınaherhangi bir kod yazmamıza gerek yoktur.

App.config

<appSettings >
         <add key="config_yol" value ="D://Proje//log4net.Config"/>
</appSettings>

      Value kısmına log4net.config dosyasının bulunduğu dizini ekliyoruz. Birden fazla katman var ise her katmanın kendine aitapp.config dosyasına ayrı ayrı eklememiz gerekir.

Class

static ILog log = LogManager.GetLogger("Görüntü.ViewModel.Deneme2ViewModel");
static string config_yol = ConfigurationSettings.AppSettings["config_yol"].ToString();
   try
   {//kodlar}
   catch
   {
       log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(config_yol));
       log.Error("Girilen barkod eksik yada hatalı!");
    }

Burada hatanın exceptionunu da göndermek istersek;
    Catch(Exception ex)
    {
       log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(config_yol));
       log.Error("Girilen barkod eksik yada hatalı!",ex);
    }

  Oluşan hatalı kodlarımızı chainsawWebStart.jnlp programında görebilmemiz için ikinci bir config dosyası oluşturmalıyız.

Chainsaw.config

<?xml version="1.0" encoding="utf-8" ?>
<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">
    <plugin name="UDPReceiver" class="org.apache.log4j.net.UDPReceiver">
       <param name="Port" value="8080" />
    </plugin>
</log4j:configuration>

     Yukarıda oluşturduğumuz chainsaw.config dosyasını projenin genel klasöründe bulunması yeterli.Projeye yeniden eklememize gerek yok.


   (Not: bu programın çalışabilmesi için bilgisayarda Java’nın yüklü olması gerekmektedir.) Bu pencerede 3. Seçeneği seçip chainsaw.config dosyasının bulunduğu dizini seçerek ok ‘e tıkladığımızda program ile projemizdeki UdpAppender bağlanmış olur. Projede oluşabilen hataları görmek için gelen ekrandaki chainsaw-log bölümünde oluşan hatalar gelmeye başlar.

LogFileAppender

    Hataları bir txt dosyasına yazdırmak ve yine tek bir config dosyasıyla tüm katmanlardan log alabilmek için yukarıda olduğu gibi log4net.config dosyası acarız ve aşağıdaki kodları yazarız.

.<startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<configSections>
        <section name="log4net"
          type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
      <logger name=" Görüntü.ViewModel.DenemeViewModel ">
              <appender-ref ref="LogFileAppender" />
      </logger>
      <root>
               <level value="ALL" />
      </root>
      <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
             <param name="File" value="D:\gunceldeneme\log-file.txt" />
             <param name="AppendToFile" value="true" />
             <rollingStyle value="Size" />
             <maxSizeRollBackups value="10" />
             <maximumFileSize value="10MB" />
             <staticLogFileName value="true" />
             <layout type="log4net.Layout.PatternLayout">
                     <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} –                          % m%n" />
              </layout>
       </appender>
</log4net>


    Burada <param name="File" value="D:\gunceldeneme\log-file.txt" /> kısmında logları yazdırmak istediğimiz txt dosyasının yolunu vermeliyiz. Kodlardaki logları alabilmek için kullanılan kodlar, projeye gömülü olup olmama durumu ve buna bağlı app.config düzeltmeleri, bu yöntemde de aynıdır.


NOT: Kullanılan log4net.dll kütüphanesi drive 'de mevcuttur. chainsaw programı ise burada' dır.

Hiç yorum yok: