Usar Log4Net en un proyecto ASP.NET MVC

Muchas veces es necesario realizar un archivo de Logs, para realizar esta tarea podemos usar varias librerías, para mi una de las mas simples de implementar es Log4Net de la Fundación Apache, que tiene una muy buena calidad y calidad de funciones.

Para conseguir la librería diríjanse a la siguiente dirección: http://logging.apache.org/log4net/download.html

Después de descargar tendrán un archivo Zip, donde deberán dirigirse al siguiente directorio:
\log4net-1.2.11\bin\net\4.0\release

Ahi se encuentra el ensamblado necesario para utilizar la librería Log4Net en un proyecto ASP.NET MVC con la versión de .NET Framewrok 4.0, para utilizarla en su proyecto descompriman la carpeta en su escritorio u otro sitio que prefieran.

Luego en su proyecto de ASP.NET MVC diríjanse a la opción Add Reference:


Se abrirá una ventana para agregar una referencia, ahí buscamos la opción “browse” y luego en el explorador de archivos nos vamos a la carpeta donde hayamos descomprimido el ensamblado de Log4Net.




Ya con el ensamblado agregado, nos dirigimos al archivo Global.Asax.cs donde buscamos el metodo Application_Start() y agregamos la siguiente linea como primera linea del metodo:

log4net.Config.XmlConfigurator.Configure();

El siguiente paso es dirigirnos al controlador de donde deseamos realizar el Log, para el caso del ejemplo vamos a usar el controlador “Account”, que viene por defecto con la plantilla de MVC3. Lo primero es agregamos la siguiente linea, para definir al manejador de Logs:

public log4net.ILog log;

El siguiente paso es crear un contructor para la clase del Controlador, donde indicamos el nombre del archivo Log:

public AccountController()
{
log = log4net.LogManager.GetLogger("File");
}
Por ultimo agregamos la siguiente linea que es la que escribe en el archivo Log:

log.Info("LogON:ModelValid");

El controlador deberia de tener la siguiente estructura despues de seguir lo pasos indicados:

public class AccountController:Controller
{
public log4net.ILoglog;
private AppContext context=new AppContext();

public AccountController()
{
log=log4net.LogManager.GetLogger("File");
}
//
//GET:/Account/LogOn
public ActionResult LogOn()
{
returnView();
}
//
//POST:/Account/LogOn
[HttpPost]
public ActionResult LogOn(LogOnModel model,string returnUrl)
{
Employees employee;
if(ModelState.IsValid)
{
try
{
log.Info("LogON:ModelValid");
employee=context.Employees.First(x=>x.Username==model.UserName&&x.Password==model.Password);
log.Info("Found:Employee");
FormsAuthentication.SetAuthCookie(model.UserName,model.RememberMe);
log.Info("LogON:SetCookieAuthentication");
if(Url.IsLocalUrl(returnUrl)&&returnUrl.Length>1&&returnUrl.StartsWith("/")
&&!returnUrl.StartsWith("//")&&!returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index","Home");
}
}
catch(InvalidOperationException ex)
{
log.Info("LogON:InvalidOperationExceptionbecausetherearenotanEmployeewithUserName="+model.UserName+"andPassword="+model.Password);
log.Info("LogON:InvalidOperationExceptionMessage:"+ex.Message);
log.Info("LogON:InvalidOperationExceptionStackTrace:"+ex.StackTrace);
log.Info("LogON:InvalidOperationExceptionInnerException:"+ex.InnerException);
ModelState.AddModelError("","Theusernameorpasswordprovidedisincorrect.");
}
catch(Exception ex)
{
log.Info("LogOn:UnknowException");
log.Info("LogON:UnknowExceptionMessage:"+ex.Message);
log.Info("LogON:UnknowExceptionStackTrace:"+ex.StackTrace);
log.Info("LogON:UnknowExceptionInnerException:"+ex.InnerException);
ModelState.AddModelError("",ex.Message+ex.StackTrace);
}
}
//If we got this far,some thing failed,redisplay form
returnView(model);
}
}
Eso seria todo para tener un archivo Log corriendo en nuestra aplicación MVC3, espero que les sirva.

Publicar un comentario