Log4Net Kullanımı
Husamettin Elalmis
Last updated
Husamettin Elalmis
Last updated
Merhaba arkadaşlar, bu yazıda sizlere .net platformlarında eski zamanlardan günümüze süregelen ve hemen hemen tüm projelerde kullanılabilen Log4Net kütüphanesinden bahsecedeğim
Log4Net Nedir?
Log4Net, farklı ortamlara log kaydı tutmak için kullanılan 3th parti bir componentdir
Şu ortamlara ilişkin logların tutulabilmesini sağlar
File log
EventViewer log
Console log
Smtp log
MSSQL db log
… diğerleri
Not: bu yapılara appender diyoruz
Detaylı bilgi için kaynak: http://logging.apache.org/log4net/log4net-2.0.12/release/config-examples.html
Projeye kurmak için "install-package log4net" console manager ortamında çalıştırılır son version kurulmuş olur (dll referansı olarak eklenecektir)
Nerelerde Kullanılır?
Hızlıca bişeylerin logunu alayım, log ortamım her an değişebilir diyorsanız kullanılması uygundur
Not: Yok ben bunu kullanmayacam kendim yazacam diyorsanız o da uygundur
Önemli Notlar
Projenin admin olarak çalıştırılması gerekmektedir
App.config dosyası doğru configure edilmelidir
İçerisinde appender blokları bulunur
Log mesajının format conversion olarak pattern şeklinde tanımlanabilir
Birçok pattern türü içermektedir
AssemblyInfo.cs dosyasının manuel elle projeye eklenmesi gerekmektedir
Bu dosya projede normalde yoktur, log4net'in log kayıtlarının devreye alınması için gereklidir
ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF şeklinde log methodlarını barındırmaktadır
Loglamayı durmak için OFF kullanılır
Tüm girdileri kabul etmek için ALL kullanılır
Program.cs
using System;
namespace Log4NetArge
{
public
class
Program
{
private
static
readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static
void Main(string[] args)
{
// install-package log4net
log.Debug(“test debug”);
log.Fatal(“fatal log”);
log.Warn(“warning log”);
try
{
throw
new Exception(“Exception!”);
}
catch (Exception ex)
{
log.Error(“Error”, ex);
}
Console.WriteLine(“ok”);
Console.ReadKey();
}
}
}
AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
App.config
<?xml
version=“1.0“
encoding=“utf-8“ ?>
<configuration>
<!– log4net config sections –>
<configSections>
<section
name=“log4net“
type=“log4net.Config.Log4NetConfigurationSectionHandler,Log4net“ />
</configSections>
<!– log4net –>
<log4net>
<!– RollingFileAppender –>
<appender
name=“RollingFileAppender“
type=“log4net.Appender.RollingFileAppender“ >
<file
value=“log.txt“ />
<encoding
value=“utf-8“ />
<appendToFile
value=“true“ />
<rollingStyle
value=“Date“ />
<layout
type=“log4net.Layout.PatternLayout“>
<!– conversionPattern örnek –>
<conversionPattern
value=“%date %level [%thread] %type.%method – %message%n“ />
</layout>
</appender>
<!– AdoNetAppender –>
<appender
name=“AdoNetAppender“
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=.; Initial Catalog=TumarkAdmin; Persist Security Info=True; Integrated Security=SSPI;pooling=true;“ />
<commandText
value=“INSERT INTO t_logs ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)“ />
<parameter>
<parameterName
value=“@log_date“ />
<dbType
value=“DateTime“ />
<!–
<layout type=”log4net.Layout.PatternLayout”>
<conversionPattern value=”%date{yyyy’-‘MM’-‘dd HH’:’mm’:’ss’.’fff}” />
</layout>
–>
<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>
<parameter>
<parameterName
value=“@exception“ />
<dbType
value=“String“ />
<size
value=“4000“ />
<layout
type=“log4net.Layout.PatternLayout“>
<conversionPattern
value=“%exception“ />
</layout>
</parameter>
</appender>
<!– ConsoleAppender –>
<appender
name=“ConsoleAppender“
type=“log4net.Appender.ConsoleAppender“>
<layout
type=“log4net.Layout.PatternLayout“>
<conversionPattern
value=“%date [%thread] %-5level %logger [%ndc] <%property{auth}> – %message%newline“ />
</layout>
</appender>
<!– EventLogAppender –>
<appender
name=“EventLogAppender“
type=“log4net.Appender.EventLogAppender“ >
<layout
type=“log4net.Layout.PatternLayout“>
<conversionPattern
value=“%date [%thread] %-5level %logger [%property{NDC}] – %message%newline“ />
</layout>
<threshhold
value=“ALL“></threshhold>
<!–<param name=”Threshold” value=”ERROR” />–>
<!–<logName value=”Services”/>–>
<applicationName
value=“Log4NetArge“/>
</appender>
<!– SmtpAppender –>
<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=“WARN“/>
</evaluator>
<layout
type=“log4net.Layout.PatternLayout“>
<conversionPattern
value=“%newline%date [%thread] %-5level %logger [%property{NDC}] – %message%newline%newline%newline“ />
</layout>
</appender>
<!– root –>
<root>
<level
value=“All“ />
<!– log yöntemlerinin hangilerinin aktif olarak devreye gireceği –>
<appender-ref
ref=“RollingFileAppender“ />
<appender-ref
ref=“AdoNetAppender“ />
<appender-ref
ref=“ConsoleAppender“ />
<appender-ref
ref=“EventLogAppender“ />
</root>
</log4net>
<startup>
<supportedRuntime
version=“v4.0“
sku=“.NETFramework,Version=v4.5“ />
</startup>
</configuration>
ConsoleAppender çıktısı
FileAppender çıktısı
MSSQLAppender çıktısı
EventViewerAppender çıktısı
Sonuç
Log4Net tercihe bağlı olarak kullanılabilir
Genellikle aşağıdaki yapıların logları için kullanılır
File log
Db log
EventViewer log
Console log (en çok tercih edilen bu oluyor genellikle)
Basit anlamda loglama işlemlerinde kullanılabilir
Şarta bağlı complex loglamalar için çok uygun değil
App.config configurasyon kısmı biraz meşakkatli.
Bizim projelerde tercihe bağlı olarak sade haliyle kullanılabilir, detaylı işlemler olursa custom kendi loglama mekanizmalarının yazılması uygun olur.
Aynı anda tüm log ortamlarına log basılabilir (file, db, eventviewer vb.)
Saygılarımla,
Hüsamettin ELALMIŞ – 12.08.2021
husamettin.elalmis@arksoft.com.tr