Dev Arksoft
  • Arksoft Developer Network
  • Ağustos 2023
    • Angularda DOM (Document Object Model) Manipülasyonu
    • Angular’da Routing
    • Representational State Transfer (REST)
    • .Net Framework için Local NugetPackage
    • Agile Nedir?
  • Temmuz 2023
    • Angular HTTP Interceptors
    • Angularda Promise ve Observable
    • Mongo DB Kullanımı
  • Haziran 2023
    • Angular Validators
  • Mayıs 2023
    • Docker Uzerine Redis Kurulumu ve .Net Core ile Redise Erişim
  • Nisan 2023
    • Angular 14 Componentler Arası İletişim
  • Şubat 2023
    • JMeter ile Performans Testi
  • Ocak 2023
    • Windows Giriş Ekranında C# Form Açmak
  • Temmuz 2022
    • Regular Expressions
  • Haziran 2022
    • RSA Şifreleme
    • AutoMapper Kullanımı
    • Permutasyon ve Kombinasyon
    • Generic Repository Pattern
    • Levenshtein Algoritması
    • HTML 5’e Giriş
    • Graph Yapılar
  • Mayıs 2022
    • IQueryable IEnumerable Farklar
    • Sıralama Algoritmaları
  • Şubat 2022
    • ADFS Custom 2FA Integration
    • Reacta Giriş ve Reactın Temel Prensipleri
    • TypeScript Kullanımı
    • Serialization Kullanımı
    • Log4Net Kullanımı
    • Collections Yapıları
    • Windows Service Projesini Debug Etme ve Harici Exe Çalıştırma
    • Culture ve DateTime Kullanımı
    • Reflection Kullanımı
    • Steganografi Teknikleri
    • ElasticSearch Kullanımı
    • SWAGGER ve JWT TOKEN BASED WEBAPI Kullanımı
    • LINQ Komutları Kullanımı
    • Image Processing İşlemleri Kullanımı
Powered by GitBook
On this page
  1. Şubat 2022

Log4Net Kullanımı

Husamettin Elalmis

PreviousSerialization KullanımıNextCollections Yapıları

Last updated 2 years ago

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] &lt;%property{auth}&gt; – %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