拦截elmah日志记录ASP.NET MVC

时间:2016-10-25 18:45:39

标签: asp.net-mvc elmah elmah.mvc

当elmah提出错误时,我想尝试拦截并执行一些其他处理(导出数据库)。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

是的,有方法

1.让我们创建项目名称 ElmahMvc

2.安装nuget包nuget

Install-Package Elmah.MVC

3。提出例外。您可以通过本地网址/ elmah访问错误日志

http://localhost:20351/elmah

保存数据库和电子邮件有点配置....

让我们看看它

1.从官方网站下载ELMAH脚本

ELMAH

2.添加名为 log 的数据库并运行脚本

3.在web.config中添加连接字符串

  <connectionStrings>
    <add name="elmah" connectionString="Data Source=.;Initial Catalog=log;Persist Security Info=True;User ID=sa;Password=pass" providerName="System.Data.SqlClient" />
  </connectionStrings>

4.在web.config

中添加elmah元素
  <elmah>

    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" /> 
   <!--For Addtional Mail Config .Remove it if not need for mail on every error-->
    <errorMail from="waltoncrm@waltonbd.com"
           to="mrahman.cse32@waltonbd.com"

           subject="Application Exception"
           async="false"
           smtpPort="25"
           smtpServer="YourServer"
           userName="uName"
           password="pass">
    </errorMail>
  </elmah>

并邮寄其他

System.WebServer下的

<system.net>
    <mailSettings>
      <smtp deliveryMethod ="Network">
        <network host="smtp.gmail.com" port="587" userName="yourgmailEmailAddress"   password="yourGmailEmailPassword" />
      </smtp>
    </mailSettings>
  </system.net>

使用Visual Studio 2013下载我的示例项目和Elmah脚本 akash365.com

注意:如果您不想让您的程序崩溃或在asp.net网络表单中使用静态 [WebMethod] 这看起来很完美

try 
{
    //some web method code 
}
catch(Exception ex)
{
    Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}

答案 1 :(得分:0)

ELMAH公开了两个事件,以便执行此操作:ErrorLog_FilteringErrorLog_Logged。在记录到配置的错误日志之前调用ErrorLog_Filtering,并且刚刚调用ErrorLog_Logged。您会在error filtering上找到有关ELMAH site的文档。 ErrorLog_Logged并未真正记录,但您可以在本文中看到它的示例:Logging to multiple ELMAH logs

话虽如此,您可能不希望在ErrorLog_LoggedErrorLog_Filtering中执行任何长时间运行的任务。它会降低你的系统速度。通过在每个错误上导出数据库,我不确定你要在这里实现什么目标?