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.
Comentarios
Publicar un comentario