logo
Welcome Guest! To enable all features please Giriş or Kayıt.

Bildirim

Icon
Error

Ayarlar
Son mesaja git Go to first unread
mehmetzekikir  
#1 Gönderildi : 9 Mayıs 2014 Cuma 09:55:05(UTC)
mehmetzekikir

Sıralama: Administration

Gruplar: Administrators
Katılan: 6.05.2014(UTC)
Mesajlar: 670

19 Kere Teşekkür Etti.
152 Mesajına Toplam 253 Kere Teşekkür Edildi.
Log4Net bizim yerimize kayitlarimizi loglayan bir dll dir. Ilk zamanlar log4j adi altinda java için çikmistir. Daha sonra .net in populer olmasi ile bu dll in .net versiyonuda yazilmistir. Önceden loglama islemlerini biz kendimiz yapardik. Kendi classlarimizi yazardik, daha sonrada bu loglarimizi textfile a, xml e, ya da veri tabanina yazariz. Tabi bu islemleri yaparken her bir islem için yeni classlar yazmamiz gerekecekti.

Biz bu isleri log4net dll ine yaptiriyoruz. Biraz Log4net yapisinda bahsedelim, ILog diye bir log interfacemiz var yapisi

Kod:

public interface ILog : ILoggerWrapper
{
bool IsDebugEnabled { get; }
bool IsErrorEnabled { get; }
bool IsFatalEnabled { get; }
bool IsInfoEnabled { get; }
bool IsWarnEnabled { get; }
 
void Debug(object message);
void Debug(object message, Exception exception);
void DebugFormat(string format, object arg0);
void DebugFormat(string format, params object[] args);
void DebugFormat(IFormatProvider provider, string format, params object[] args);
void DebugFormat(string format, object arg0, object arg1);
void DebugFormat(string format, object arg0, object arg1, object arg2);
void Error(object message);
void Error(object message, Exception exception);
void ErrorFormat(string format, object arg0);
void ErrorFormat(string format, params object[] args);
void ErrorFormat(IFormatProvider provider, string format, params object[] args);
void ErrorFormat(string format, object arg0, object arg1);
void ErrorFormat(string format, object arg0, object arg1, object arg2);
void Fatal(object message);
void Fatal(object message, Exception exception);
void FatalFormat(string format, object arg0);
void FatalFormat(string format, params object[] args);
void FatalFormat(IFormatProvider provider, string format, params object[] args);
void FatalFormat(string format, object arg0, object arg1);
void FatalFormat(string format, object arg0, object arg1, object arg2);
void Info(object message);
void Info(object message, Exception exception);
void InfoFormat(string format, object arg0);
void InfoFormat(string format, params object[] args);
void InfoFormat(IFormatProvider provider, string format, params object[] args);
void InfoFormat(string format, object arg0, object arg1);
void InfoFormat(string format, object arg0, object arg1, object arg2);
void Warn(object message);
void Warn(object message, Exception exception);
void WarnFormat(string format, object arg0);
void WarnFormat(string format, params object[] args);
void WarnFormat(IFormatProvider provider, string format, params object[] args);
void WarnFormat(string format, object arg0, object arg1);
void WarnFormat(string format, object arg0, object arg1, object arg2);
}


Interfacemiz yukaridaki formatlarda hatalari yakalayabilmekte uyarilari belirtmekte ve kullanicilarin her yaptigi islemi kaydedebilmektedir.

Biraz bunlari açiklamak gerekirse

bool IsDebugEnabled { get; } -- Burada debug mod açik ise islem yapar. True dönerse kaydi yakalar.

bool IsErrorEnabled { get; } -- Burada error modu açik ise islem yapar. True dönerse kaydi yakalar

bool IsFatalEnabled { get; } -- Burada Fatal error modu açiktir. True dönerse kaydi yakalar.

bool IsInfoEnabled { get; } -- Burada Info modu açiktir. True dönerse kaydi yakalar böylece kullanicinin yaptigi her isi kaydeder.

bool IsWarnEnabled { get; } ?- Burada Warn modu açiktir. True dönerse uyariyi yakalar.

Bu Property enable oldugu zaman bu kayitlari yakalama metodlari vardir. Metodlar overload edilmis bir sekilde yukaridadir.


Hatalari yakaladigimiz levellerimiz vardir. Bu leveller asagidaki gibidir.

ALL, DEBUG, INFO, WARM, ERROR, FATAL, OFF

Levellerimiz öncelik siralamalari vardir, bunlar

DEBUG < INFO < WARN < ERROR < FATAL

Log4nette çikis hedeflerine Appender denir. Log4net birden çok yere ayni anda log alabilir. Ve bunlari IAppernder Interface inden türeltilen Appender namespace i altindaki farkli yetenek ve isimlerdeki Appender Classlari ile yapariz.

log4net.Appender.AdoNetAppender: :Log kayitrlari databasede tutulur.

log4net.Appender.AnsiColorTerminalAppender : Log Kayitlari renklendirilmis bir halde ansi terminal ekraninda görüntülenir.

log4net.Appender.AspNetTraceAppender: Log kayitlari asp.net in trace penceresinde görüntülenir.

log4net.Appender.ColoredConsoleAppender: Console ekrani renklendirilmis halde loglari bize gösterir.

log4net.Appender.ConsoleAppender: Console ekraninda log kayitlarini görürüz

log4net.Appender.DebugAppender: Log kayitlarini .net eventlerine gönderir.

log4net.Appender.EventLogAppender: Loglari windows event loguna yazar

log4net.Appender.FileAppender: Log kayitlarini file a yazar

log4net.Appender.LocalSyslogAppender:Log kayitlarini syslog a yazar ( sadece UNIX).

log4net.Appender.MemoryAppender: Log kayitlarini memedow buffer a yazar

log4net.Appender.NetSendAppender: Windows Messenger Service deki loglarin kayitlarini tutar, Bu mesajlar sadece user terminalde görünür.

log4net.Appender.RollingFileAppender: Log kayitlarini birden fazla dosyaya yazdirabilirsiniz ve ayni zamanda dosya ayarlarinida yapabiliriz.

log4net.Appender.SmtpAppender: Log kayitlarini email olarak gönderir.

log4net.Appender.TelnetAppender: Kullanici Log kayitlarini TELNET den alir.



Simdi 1 tane log4net uygulamasi yapalim,

Log4net uygulamasi için öncellikle http://logging.apache.org/log4net/ adresine giderek log4net.dll i indiriniz.

Sonra bir adet web uygulamasi açalim, sonra indirdigimiz log4net.dll yi projeye referans olarak ekeliyelim.

Web uygulamamizin içine bir adet global.asax dosyasi ekleyelim ve bu dosyayi açalim, Application Start?in içine

log4net.Config.DOMConfigurator.Configure(); Bu satiri ekleyin

Görünüm asagidaki gibidir.

Kod:
protected void Application_Start(object sender, EventArgs e)
{
log4net.Config.DOMConfigurator.Configure();
}



Sonra projemizin App.Config dosyasini açalim. Dosyamizi asagidaki sekildeki gibi yapilandiralim

Kod:

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="Loglar.txt"/>
<param name="AppendToFile" value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- Dosyanin kapanmasi -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n"/>
</layout>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="FileAppender"/>
</root>
</log4net>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>
 

<param name="File" value="Loglar.txt"/>


Bu tag ile dosya açilis formati belirlenir. AppendtoFile eger dosya yoksa olustur demektir. Eger var ise mevcut dosyadan kayit eklemeye devam et demektir.

<param name="AppendToFile" value="true"/>

Asagidaki kod sayesinde dosya ile isimiz bittiginde dosyayi açmamiza yaramaktadir.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />


Bu kodda yazilicak olan logun formati tutulmaktadir. Bu konu baska bir makalede genisçe anlatilacaktir.

<param name="ConversionPattern" value="%d [%t] %-2p %c [%x] - %m%n"/>


Asagidaki kodda kaydedilecek loglarin modu tutulmustur. Modlar yukarida belirtilmistir.

<level value="ALL"/>


Söyle bir ekran tasarladik

UserPostedImage

Kod Kismi;

Kod:
using log4net;
 
namespace LogForNetTestWebProject
{
public partial class WebForm1 : System.Web.UI.Page
{
log4net.ILog logger = log4net.LogManager.GetLogger(typeof(WebForm1));
 
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
createSession();
logger.Info("Sisteme ilk kez giris yapildi from" + Session["User"].ToString());
lblUserName.Text = Session["User"].ToString();
}
else
{
 
}
}
 
protected void btnSeeIp_Click(object sender, EventArgs e)
{
logger.Info("Sisteme " + Request.Browser.Browser + " ile giris yapildi" );
 
}
 
void createSession()
{
Session["User"] = "Memedow";
}
 
protected void btnConnectDb_Click(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection();
con.Open();
}
catch(Exception ex)
{
lblIp.Text = "Database'e baglanamadik";
logger.Error("DataBase e " +Session["User"].ToString()+ " tarafindan baglanilmaya calisilmistir ama " +ex.Message.ToString()+ " hatasi yakalanmistir" );
}
}
}
}


Burada Ilog interface inden logger türetiyoruz GetLogger ile kontrol edecegimiz Webformu seçiyoruz.

log4net.ILog logger = log4net.LogManager.GetLogger(typeof(WebForm1));


Bu kodda sisteme giris yapildigi için bir adet info belirttik.

Kod:
logger.Info("Sisteme ilk kez giris yapildi from" + Session["User"].ToString());



Asagidaki kodda bir adet exception yakaldik

Kod:
try
{
SqlConnection con = new SqlConnection();
con.Open();
}
catch(Exception ex)
{
lblIp.Text = "Database'e baglanamadik";
logger.Error("DataBase e " +Session["User"].ToString()+ " tarafindan baglanilmaya calisilmistir ama " +ex.Message.ToString()+ " hatasi yakalanmistir" );
} 


Uygulamayi derledigimiz zaman Loglar.txt dosyasina bir bakalim

UserPostedImage

2011-12-15 09:41:21,024 [5] INFO LogForNetTestWebProject.WebForm1 [(null)] - Sisteme ilk kez giris yapildi from Memedow,

2011-12-15 09:41:23,466 [18] ERROR LogForNetTestWebProject.WebForm1 [(null)] - DataBase e Memedow tarafindan baglanilmaya calisilmistir ama The ConnectionString property has not been initialized. hatasi yakalanmistir
Sql Server 2016 Eğitimiz 19 Mayıs tarihinde başlayacaktır. 32 Saat Olup Ücret 1450 TL + KDV'dir. Kayıt ve ayrıntılar için tıklayınız

twitter.com/dbakademi
Dua ve teşekkür en büyük servetlere bedel...


Bu konudaki kullanıcılar
Guest (3)
Forumu Atla  
Bu foruma yeni konular postalayamazsınız.
Bu forumda ki konulara yeni posta gönderemezsiniz.
Bu forumdaki postalarınızı silemezsiniz.
Bu forumdaki postalarınızı düzenleyemezsiniz.
Bu forumda anketler yaratamazsınız.
Bu forumdaki anketlere oy veremezsiniz.