ASP.NET MVC 4中使用SQL SERVER 2008 R2的ELMAH

7
我在测试数据库中运行了 ELMAH SQL 脚本(它创建了 ELmah_Error 表和 3 个存储过程),并使用 Nuget 在 MVC 应用程序中配置了 ELMAH。
我按照指定的方式修改了 web.config,并能够将异常记录到
 http://mysite/elmah.axd

但是,我想将异常记录到Sql Server中。

我添加了以下类来实现这一功能。

public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(System.Web.Mvc.ExceptionContext context)
    {
        LogException(e);
    }
    private static void LogException(Exception e)
    {
         // Call to Database and insert the exception info
    } 
}

最后一步是:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new ElmahHandleErrorAttribute ());
}

使用ELMAH记录所有异常的方法正确吗?还是我漏掉了什么?

1个回答

11

一旦您设置好了数据库,您只需要将以下内容添加到您的web.config文件中的<elmah>部分,即可设置Elmah记录到SQL数据库:

 <elmah>
      <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="<DBConnString>"
            applicationName="<YourApp>" 
  </elmah>

请将<DBConnString><YourApp>替换为适合您配置的值。完成此操作后,您将不需要使用自定义的ElmahHandleErrorAttribute类。
我不确定您安装了哪个NuGet包,但我建议使用Elmah.MVC包,因为它通过为您设置所有ErrorHandler和ErrorFilters,将Elmah与MVC集成得非常好。

1
现有的 elmah 配置怎么样?elmah 会创建必要的表格吗? - Rahatur
7
Elmah不会自动创建现有的表格。但是,您可以从https://code.google.com/p/elmah/wiki/Downloads下载一个脚本来为您的数据库类型和版本执行此操作,位于“database”部分。 - Paige Cook
我相信应该将连接字符串名称(在web.config的<connectionStrings>部分中定义)而不是连接字符串本身放入connectionStringName="<connection-string-name>"值中。 - Bern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接