【问题标题】:MVC 5 c# reporting errors back to the databaseMVC 5 c# 将错误报告回数据库
【发布时间】:2015-07-13 09:59:41
【问题描述】:

我们有一个 MVC 应用程序,将(由用户)生成的错误记录回我们的支持数据库的最佳方法是什么?用户应该只看到“已报告此错误”错误消息

所有细节都应该写入数据库

请帮忙!

【问题讨论】:

  • 如果连接到支持数据库时出错会怎样?记录错误的最佳位置是应用服务器上的文本文件。
  • 利用记录器...比如 log4net 将记录到您的数据库
  • @user1666620 小心声称“最佳”实践。您会发现意见不同(尤其是当日志文件填满文件系统时)。
  • 我认为这应该转移到programmers.stackexchange,因为这不是一个特定的错误,而是一个设计问题
  • @richard 如果您正处于文件系统充满错误日志的阶段,那么我认为将它们存储在数据库中不会有任何帮助。

标签: c# asp.net-mvc error-handling


【解决方案1】:

我建议你要么使用像 Log4Net 这样的外部库,要么创建你自己的库类来为你做日志记录。

还有一个建议是使用 MVC 文件中提供的 ExceptionFilter,并在该过滤器中编写登录代码。我建议是因为它不会导致您一次又一次地编写代码,它遵循 DRY 原则。

例子:

public class CustomExceptionFilter: FilterAttribute,  
IExceptionFilter   
{  
    public void OnException(ExceptionContext filterContext)   
    {  
        if (!filterContext.ExceptionHandled)   
        {  
            //log error here 
            Logger.LogException(filterContext.Exception);
            //this will redirect to error page and show use logging is done 
            filterContext.Result = new   
                        RedirectResult("customErrorPage.html");  
             filterContext.ExceptionHandled = true;  
        }  
    }  
}

你可以这样做

//Over controller  
[CustomExceptionFilter]  
public class HomeController:Controller 
{  
   //......  
}  


//Over the Action  
[CustomExceptionFilter]  
public ActionResult Index() 
{  
   //.......  
}  

检查 log4net:log4net Tutorial

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2017-03-27
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2013-05-07
    相关资源
    最近更新 更多