|
Log4Net ile Loglama |
|
Gönderiliyor lütfen bekleyin... |
|
|
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=" [email protected]" />
<from value=" [email protected]" />
<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
|
|
|
-
-
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
|
|