Captura de excepciones en ASP.NET usando Log4Net

Log4net es una muy buena libreria para hacer logging de errores y eventos en nuestra aplicaciones de una manera muy sencilla.

Para comenzar con Log4Net debemos primero agregar el nuget nuget package:

dotnet add package log4net

Luego debemos incluir el archivo log4net.config, el cual contiene toda la configuracion de como queremos guardar nuestras excepciones y mensajes. Podemos especificar el formato, el nombre del archivo, el tamaño maximo entre otros.

Archivo de ejemplo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net>
        <root>
            <level value="ALL" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="api.log" />
            <appendToFile value="true" />
            <rollingStyle value="Composite" />
            <maxSizeRollBackups value="5" />
            <maximumFileSize value="10MB" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date %5level %class - MESSAGE: %message%newline"/>
            </layout>
        </appender>
    </log4net>
</configuration>
  • file: Nombre del archivo de log que se va a crear
  • level: Nivel de error que se va a guardar, podemos usar ALL para incluir todos.
  • maximumFileSize: El tamaño maximo del archivo, luego de superar el tamaño va a crear uno nuevo

El la siguiente imagen puedes ver donde se encuentra ubicado el archivo log4net.config: 

Realizamos ahora la configuración del log de manera global en nuestra aplicacion y API tomando el archivo log4net.config de referencia

 public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
 
 
            ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetEntryAssembly());
            var fileInfo = new FileInfo(@"log4net.config");
            log4net.Config.XmlConfigurator.Configure(repository, fileInfo);
 
            host.Run();
        }

Finalmente, agregamos un filtro que nos ayudará a detectar cuando hay una excepción y luego internamente podemos guardar en el log.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using log4net;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
 
namespace Api.Attributes
{
   public class LogFilterAttribute : ExceptionFilterAttribute
    {
        ILog logger;
        public LogFilterAttribute()
        {
            logger =  LogManager.GetLogger(typeof(LogFilterAttribute));
        }
        public override void OnException(ExceptionContext Context)
        {
            logger.Error(Context.Exception.Message + " - "  + Context.Exception.StackTrace);
        }
    }
}

Agregamos el servicio del filtro que hemos creado.

">services.AddControllersWithViews(p=> p.Filters.Add(new LogFilterAttribute()));

Ahora ya tendriamos todas las posibles excepciones logueadas en el archivo log, con todo el detalle que queramos. Vamos a buscar el log en la carpeta Api\bin\Debug\net5.0

Ejemplo de un excepción dentro del log:

Si deseas guardar de manera manual algun mensaje o expcecion en el log de igualmente puedes lograrlo usando el Logger de .NET.

Un comentario en «Captura de excepciones en ASP.NET usando Log4Net»

Los comentarios están cerrados.