通用权限管理平台利用过滤器实现自动记录系统日志功能。
首先需要自定义日志过滤器属性LogRequestAttribute,并且继承ActionFilterAttribute,IActionFilter
在日志过滤器属性类中实现基类IActionFilter的方法OnActionExecuting
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
try
{
TLogDo log = new TLogDo();
log.LogGuid = System.Guid.NewGuid().ToString();
TUserDo user=DataAccess.FindById<TUserDo>(filterContext.HttpContext.User.Identity.Name);
log.UserName = user == null ? "" : user.LoginId;
log.Operation = OperationDescription;
log.OpDate = System.DateTime.Now;
log.Url = filterContext.HttpContext.Request.Url.ToString();
log.IpAddress = filterContext.ActionParameters["IPAdress"] == null ? "" : filterContext.ActionParameters["IPAdress"].ToString(); //filterContext.HttpContext.Request.UserHostAddress;
DataAccess.Add<TLogDo>(log);
}
catch
{
}
finally
{
}
}
另外,为了记录模块操作中文描述需要在此类中增加一个自定义属性OperationDescription操作描述,这样的话就可以达到记录不同模块不同操作。
这样的话,自动日志记录功能已经实现,接下来需要做的是,对需要日志记录的Controller增加日志属性,完成与日志的绑定。
[LogRequest(OperationDescription = "登录")]
public ActionResult LogOn()
{
return View();
}
这样增加LogRequest属性即可实现Action的日志功能。
演示地址:http://hnjgsoft.xicp.net/ 账号:admin 密码:888888