Uso de Log4Net y ElasticSearch

 

 Fuentes:

Esta guía busca dar un buen ejemplo de cómo realizar la inserción de logs en cualquier aplicación .Net hacia nuestro sistema de logs Elasticsearch.

1.  Instalar vía nuget la librería   https://www.nuget.org/packages/log4net.ElasticSearch/  


2.  Adicionar la referencia a la librería propia Transfiriendo.Core.dll, la cual contiene el wrapper de las librerías de logging (actualmente log4net).

3. Insertar los logs según la necesidad. Por ejemplo, 


using Transfiriendo.Core.Logger;

    using System;


    /// <summary>

    /// The Program class.

    /// </summary>

    class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        static void Main(string[] args)

        {

            try

            {

                Logger<Program>.Current.Debug("This is a DEBUG log");


                Logger<Program>.Current.Debug("This is a DEBUG log with custom properties", new[,] { { "property1", "value1" }, { "property2", "value2" } });


                Logger<Program>.Current.Info("This is a INFO log");


                Logger<Program>.Current.Info("This is a INFO log with custom properties", new[,] { { "property1", "value1" }, { "property2", "value2" } });


            }

            catch (Exception ex)

            {

                Logger<Program>.Current.Warn("This is a WARN log with exception", ex);


                Logger<Program>.Current.Warn("This is a WARN log with custom properties", new[,] { { "property1", "value1" }, { "property2", "value2" } });


                Logger<Program>.Current.Error("This is a ERROR log with exception", ex);


                Logger<Program>.Current.Error("This is a ERROR log with custom properties", new[,] { { "property1", "value1" }, { "property2", "value2" } });


                Logger<Program>.Current.Fatal("This is a Fatal log with exception", ex);


                Logger<Program>.Current.Fatal("This is a FATAL log with custom properties", new[,] { { "property1", "value1" }, { "property2", "value2" } });

            }

        }

    }


4. En nuestro App.config o Web.config insertaremos el siguiente appender de log4net encargado:

La referencia al appender:

                  <appender-ref ref="ElasticSearchAppender" />
                  
                    

Y , el appender:

<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">

      <connectionString value="Scheme=http;Server=ifacturacolombia.cloudapp.net;Index=index;Port=9200;User=user;Pwd=password;rolling=true" />

      <lossy value="false" />

      <evaluator type="log4net.Core.LevelEvaluator">

        <threshold value="ERROR" />

      </evaluator>

      <bufferSize value="100" />

   </appender>

Debemos cambiar el usuario ( user ), la contraseña ( password ) y el índice  ( index ) donde llegará nuestra información en elasticsearch.

5. Se recomienda adicionar el nodo appender LogFileAppender encargado de guardar el archivo físico con el log y así servir de respaldo para el log guardado en ElasticSearch.

El nodo recomendado es:

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">

      <filter type="log4net.Filter.LevelRangeFilter">

        <levelMin value="DEBUG" />

        <levelMax value="ERROR" />

      </filter>

      <param name="File" value="C:\\TransfiriendoLogs\\Ifactura.Web\\Ifactura.Web.log" />

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

      <param name="RollingStyle" value="Date" />

      <param name="DatePattern" value="yyyyMMdd" />

      <layout type="log4net.Layout.PatternLayout,log4net">

        <param name="ConversionPattern" value="{&quot;timestamp&quot;:&quot;%d&quot;,&quot;thread&quot;:&quot;%t&quot;,&quot;level&quot;:&quot;%level&quot;,&quot;stacktrace&quot;:&quot;%stacktrace{2}&quot;,&quot;message&quot;:&quot;%m&quot;,&quot;exception&quot;:&quot;%exception&quot;,&quot;properties&quot;:&quot;%properties&quot;}%n" />

      </layout>

    </appender>

6. Fin de la configuración.