C#nedir?com
 
YAZAR HAKKINDA
Mustafa Erhan Ersoy
Mustafa Erhan Ersoy
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
14 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: ayarlari dosyasindan ekleyicisi ekleyicisinden konfigurasyon konsol kullanabilir log4net loglama mesajlar mesajlarimizi sayesinde sonra uygulama uygulamanin C# / VC#/.NET Mustafa Erhan Ersoy
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 20.1.2006
Okunma Sayısı : 39977
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 21.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 21.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 21.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Log4Net ile Loglama
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Log4Net, pek çok ekleyicisi (appender) sayesinde uygulama geliştiricilere geniş bir yelpaze sunan başarılı bir loglama aracıdır. Java loglama aracı Log4J"nin .NET uyarlamasıdır. Dosya, SQL Server, event log, smtp gibi birçok ekleyicisini uygulamanızın konfigurasyon dosyasından yapacağınız birkaç ayar ile basitçe kullanabilir, istediğimiz zaman projeyi tekrar derlemeye yada kurmaya gerek kalmadan loglama özelliğini kapatabiliriz.

Öncelikle Log4Net seviyelerinde bahsedip ardından Log4Net"i nasıl kullanacağımızı gösteren basit bir konsol uygulamasını inceleyeceğiz. Daha sonra log4net"in önemini ortaya çıkaracak ekleyicilerinden bahsedeceğiz.

Log4Net Seviyeleri Uygulamamız içerisinden mesajlarımızı loglanmak üzere logger"a gönderdikten sonra, logger uygulamanın loglama seviyesine (bu seviye konfigurasyon dosyasında tutulur) bakar. Eğer mesaj loglama seviyesinin belirlediği hassaslığa uygun ise loglanır.

  • ALL : Tüm mesajların loglandığı seviyedir.
  • DEBUG : Developement aşamasına yönelik loglama seviyesidir.
  • INFO : Uygulamanın çalışması sırasında yararlı olabileceğini düşündüğümüz durum bilgilerini loglayabileceğimiz seviyedir.
  • WARN : Hata olmayan fakat önemli bir durumun oluştuğunu belirtebileceğimiz seviye.
  • ERROR : Hata durumunu belirten seviye. Sistem hala çalışır haldedir.
  • FATAL : Uygulamanın sonlanacağını, faaliyet gösteremeyeceğini belirten mesajlar için kullanılacak seviyedir.
  • OFF : Hiç bir mesajın loglanmadığı seviyedir.
Listede her seviye altındaki seviyeleri kapsar. Mesela, konfigurasyon dosyamızda uygulamamızın loglama seviyesini ERROR olarak ayarladıysak, Logger.Error() ve Logger.Fatal() metodları ile yazılan tüm mesajlar ekleyicilere yönlendirilir.

<root>
    <level value="ERROR" />
    <appender-ref ref="LogFileAppender" />
    <appender-ref ref="EventLogAppender" />
</root>
<logger name="Log4NETDemo.Class1">
    <level value="FATAL" />
    <appender-ref ref="SmtpAppender" />
</logger>
Yukarıda uygulama loglama seviyesinin ERROR olarak ayarlandığını, log dosyasına ve evelnt loga loglama yapıldığını görüyorsunuz. Ayrıca FATAL olan log mesajlarının Smtp ekleyicisi ile ayrıca loglandığını görüyorsunuz.

Log4Net kullanımı Makalemin sonundaki adresten Log4Net"i indirdiğinizde, araç ile birlikte gelen örnek uygulamalargöreceksiniz. Bu örnek uygulamalardan konsol uygulaması üzerinde birkaç değişiklik yaparak Log4Net"i nasıl kullanabileceğinizi inceleyelim.

NOT : Örnek uygulamaların konfigurasyon dosyalarında, olmaması gereken birçok basit hata ile karşılaştım. Örnek uygulamaları incelerken Xml tabanlı konfigurayson dosyalarını (*.config) iyi tanımlanmış hale getirmeniz gerekebilir.

class Log4NetDemoClass
{
    private static readonly log4net.ILog log = 
log4net.LogManager.
GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    [STAThread]
    static void Main(string[] args)
    {
        // Log an info level message
        if (log.IsInfoEnabled)
        {
            log.Info("Uygulama Başlatıldı.");
        }

        // Log a debug message. Test if debug is enabled before
        // attempting to log the message. This is not required but
        // can make running without logging faster.
        if (log.IsDebugEnabled)
        {
            log.Debug("Debug mesajı.");
        }

        try
        {
            // Hata ! [DivideByZeroException] :
            int a = 0;
            int b = 35 / a;
        }
        catch(DivideByZeroException ex)
        {
            // Log an error with an exception
            log.Error("0"a bölme hatası !", ex);
        }

        log.Error("Hata mesajı !");
        log.Warn("Uyarı mesajı !");


        // Log an info level message
        if (log.IsInfoEnabled)
        {
            log.Info("Uygulama sonlandırıldı.");
        }

        Console.ReadLine();
    }
}

Gördüğünüz gibi LogManager sınıfı yardımıyla ILog arayüzünü uygulayan logger nesnemizi aldıktan sonra, Error, Warn, Debug, Fatal ve Info metodlarını kullanarak uygulamamızda olan hataları yada takip amaçlı mesajlarımızı basitçe loglayabiliyoruz. Buraya kadar ki kısım uygulamalarımızda kullandığımız System.Diagnostics namespace"i içerisindeki Debug ve Trace sınıflarına benzer bir kullanım olduğunu farketmişsinizdir. Peki yazdırdığımız tüm bu mesajlar nereye yazıldı ? İşte bu sorunun cevabı konfigurasyon dosyamızda gizli.

Ekleyiciler (Appenders) Ekleyiciler, log mesajlarını belirlediğimiz hedeflere yönlendiren nesnelerdir. Aynı anda birden fazla ekleyici kullanabilir, farklı seviyelerdeki mesajları farklı ekleyicilere yönlendirebiliriz. Log dosyası ekleyicisinden eventlog ekleyicisine, netsend ekleyicisinden smtp ekleyicisine, ADO.NET ekleyicisinden konsol ekleyicisine kadar bir çok ekleyici sunan Log4Net konfigurasyon dosyasından sağladığı basit ayarlar ile uygulama geliştiricilerin işini çok kolaylaştırıyor. Örnek olarak üç ekleyiciyi incelemeye çalışalım :

ADONetAppender Ekleyicisi Bu ekleyiciler adından da anlayacağınız üzere, log mesajlarını veritabanına yazıyorlar. Aşağıda Sql Server"a loglama yapabilmemiz için oluşturacağımız tabloyu ve gerekli ayarları görüyorsunuz :


Resim 1. ADONetAppender için Sql Server tablosu.

<appender name="ADONetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection, 
        System.Data, Version=1.0.3300.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089" />
    <connectionString value="data source=MORDOR\DENEME;
        initial catalog=Shark;integrated security=false;
        persist security info=True;User ID=sa;Password=xxx" />
    <commandText value="INSERT INTO Log 
        ([Date],[Thread],[Level],[Logger],[Message]) 
        VALUES (@log_date, @thread, @log_level, @logger, @message)" />
    <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%thread" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%level" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%logger" />
        </layout>
    </parameter>
    <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%message" />
        </layout>
    </parameter>
</appender>
Ayarın çokluğu göz korkutucu gelebilir, fakat aslında yapılması gereken sadece tablonun oluşturulup yukarıdaki connection string"in ayarlanmasıdır. Makalenin kodlarının bulunduğu uygulama içerisinde bahsettiğim tabloyu oluşturmak için gerekli olan TSQL scriptini bulabilirsiniz.

EventLogAppender Ekleyicisi EventLogAppender, log mesajlarımızı event log"a yönlendirmemize olanak sağlar. conversionPattern tagi ile event log"a yazılacak mesajın formatını belirliyoruz. Bu tagi ve formatı diğer bazı ekleyicilerde de kullanabilirsiniz.

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level 
            %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>


Resim 2. EventLogAppender ile loglanmış bir hata mesajı.

SmtpAppender Ekleyicisi SmtpAppender, log mesajlarımızı mail ile sorumlu kişilere ulaştırmamızı sağlayan ekleyicidir. Diğer tüm ekleyiciler gibi konfigurasyon ayarları oldukça basittir. LevelEvaluator tagi ile ERROR seviyesi belirtildiğini görüyorsunuz. Bu durumda ERROR veya üst seviyelerdeki tüm mesajlar ayrı ayrı mail ile gönderilecektir.

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="mail@domain.com" />
    <from value="mail@domain.com" />
    <subject value="LOGING TEST" />
    <smtpHost value="mail.domain.com" />
    <bufferSize value="1024" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="ERROR"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level 
            %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>

Sonuç Log4Net, uygulama geliştiricilerin uygulamaları çalışırken izlemelerine, hata çözümüne ve bilgilendirme ve uyarı sistemi oluşturmasına yardımcı olan ve .NET için benzerlerinin içerisindeki en iyi açık kaynak loglama aracıdır. Birçok ekleyicisi ve kolay ayarlanabilen konfigurasyon ayarları sayesinde zahmetsizce kullanılabilir.

Kaynaklar ve Linkler Makalede anlatılan örnekleri indirmek için tıklayın.
Makale:
Log4Net ile Loglama C#, Visual C# ve .NET Mustafa Erhan Ersoy
  • Yazılan Yorumlar
  • Yorum Yaz
AĞU
6
2012
Merhaba, aynı anda bir parametre kullanarak farklı table lara log lama yapabilirmiyiz. Yani log4net i iki appender yazarak farklı table lara loglama yapabilirmiyiz..
OCA
20
2006
.NET araçları ve Frameworkleri serisinin herkese faydalı olduğunu ümit ediyor, teşekkür ediyorum.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor