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.
Reblogueó esto en El Bruno.