如何在刷新时停止ELMAH表单记录相同的异常?

时间:2015-07-22 13:09:45

标签: elmah elmah.mvc

我将ELMAH用于我的Asp.net MVC项目异常日志记录,我已将其设置为将异常记录到数据库中,但我的问题是如果发生异常并且用户因任何原因刷新页面(也许在每次刷新时都会认为通过刷新页面可能会变得可用),一条记录被插入到数据库中,我担心它会导致它非常大的表(我已经限制了ELMAH只能保留过去90天,但它仍然可能变得太大了),我想知道是否有办法在一段时间内限制从同一页面出现的记录异常的数量。

1 个答案:

答案 0 :(得分:1)

最终我最终做的是查询数据库,如果最后一个异常的TimeUtc形成时间不到5分钟,并且其消息与当前发生的异常相同,我&# 39; ve驳回了日志,这里是我做过的演练:

  1. 首先安装This package,添加ELMAH_Errors表和实体,以便使用EF查询ELMAH_Errors
  2. 您可以使用实体框架来操纵ELMAH_Errors
  3. Global.asax中添加以下代码:

    void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
        {
            using (var context = new ElmahContext())
            {
                var lastErr = context.ELMAH_Errors.OrderByDescending(m => m.TimeUtc).Take(1).SingleOrDefault();
    
                if (lastErr != null &&
                    (e.Exception.Message == lastErr.Message && lastErr.TimeUtc > DateTime.UtcNow.AddMinutes(-5)))
                {
                    e.Dismiss();
                }
            }
    

    你也可以为ErrorMail_Filtering添加此代码,这里也是another approach,但是这样做的方式是无论错误是什么以及错误发生在哪里,它都会保留ELMAH在特定时间段内进行表单记录,我的方法并不是最好的,但它仍然会在每次刷新时获得记录。