2015-07-20 40 views
-1

我試圖存儲自定義登錄數據庫錯誤,所以我有自定義日誌記錄到數據庫

public enum Events 
{ 
    Error, 
    Info, 
    Debug 
}  

public class Logging 
{ 
    public int LoggingID { get; set; } 
    public Events EventName { get; set; } 
    public string Message { get; set; } 
    public virtual Customer Customer { get; set; } 

} 

,併爲每個事件我發了消息,這樣的例子

LogHelper.Infos(" Running application "); 
     ConfigureAuth(app); 

我怎麼可以存儲數據庫中的這些事件?

回答

0

您可以定義日誌實體是這樣的:

public class LogAction 
{ 
     public DateTime PerformedAt { get; set; } 
     public string Controller { get; set; } 
     public string Action { get; set; } 
     public string Description { get; set; } 
     public string UserName { get; set; } 
     public string Ip { get; set; } 
} 

然後您可以創建一個自定義屬性是這樣的:

public class LogAttribute : ActionFilterAttribute 
    { 
     public string Description { get; set; } 
     public IUnitOfWork Uow { get; set; } 
     public ILogActionService LogActionService { get; set; } 

     public IApplicationUserManager ApplicationUserManager { get; set; } 
     public LogAttribute(string desciption) 
     { 
      Description = desciption; 
     } 


     public override void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      string currentUserId = null; 
      if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       currentUserId = filterContext.HttpContext.User.Identity.GetUserId(); 
      } 
      var model = new LogAction 
      { 
       UserName = currentUserId ?? "Anonymouse user", 
       Action = filterContext.ActionDescriptor.ActionName, 
       Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, 
       Description = Description, 
       PerformedAt = DateTime.Now, 
       Ip = Helper.Helper.GetUser_IP_Message() 
      }; 
      LogActionService.AddLog(model); 
      Uow.SaveAllChanges(); 
      base.OnActionExecuted(filterContext); 
     } 
    } 

正如你所看到的,在OnActionExecuted方法,你可以填充該實體並將其保存到數據庫中,因此您可以使用以下方式的屬性:

[Log("Home Page")] 
public ActionResult Index() 
{ 
    return View(); 
}