【发布时间】:2017-03-07 22:38:06
【问题描述】:
当 elmah 引发错误时,我想尝试拦截并做一些其他处理(导出数据库)。有没有办法做到这一点?
【问题讨论】:
标签: asp.net-mvc elmah elmah.mvc
当 elmah 引发错误时,我想尝试拦截并做一些其他处理(导出数据库)。有没有办法做到这一点?
【问题讨论】:
标签: asp.net-mvc elmah elmah.mvc
ELMAH 公开了两个事件以执行此操作:ErrorLog_Filtering 和 ErrorLog_Logged。 ErrorLog_Filtering 在记录到配置的错误日志之前被调用,ErrorLog_Logged 在之后被调用。您将在 ELMAH site 上找到有关 error filtering 的文档。 ErrorLog_Logged 并没有真正记录在案,但您可以在本文中看到它的一个示例:Logging to multiple ELMAH logs。
话虽如此,您可能不想在ErrorLog_Logged 和ErrorLog_Filtering 中执行任何长时间运行的任务。它会减慢你的系统。我不确定您通过在每个错误上导出数据库来达到什么目的?
【讨论】:
是的,有办法
1.让我们创建一个项目名称ElmahMvc
2.安装nuget包nuget
Install-Package Elmah.MVC
3。引发 Exception 。您可以通过本地 url/elmah 访问错误日志
保存数据库和发送电子邮件需要一些配置......
让我们看看
1.下载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);
}
【讨论】: