0

每次 Elmah 记录错误时,该错误都会记录两次。100% 与完全相同的时间戳相同。我在 web.config 中没有特殊配置。我创建了一个 ElmahHandleErrorAttribute 并添加了两个过滤器:

filters.Add(new ElmahHandleErrorAttribute {

            ExceptionType = typeof(System.Data.Common.DbException),
            // DbError.cshtml is a view in the Shared folder.
            View = "DbError",
            Order = 2
        });

filters.Add(new ElmahHandleErrorAttribute {

            ExceptionType = typeof(Exception),
            // DbError.cshtml is a view in the Shared folder.
            View = "Error",
            Order = 3
        });

来自 web.config 的一些片段:

<httpModules>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>

<modules runAllManagedModulesForAllRequests="true">
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
        <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
        <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>

在 ElmaHandleErrorAttribute 中,这段代码:

public override void OnException(ExceptionContext context) {
        base.OnException(context);
        if (!context.ExceptionHandled       
            || TryRaiseErrorSignal(context) 
            || IsFiltered(context))         
            return;

        LogException(context);
    }

我进行了很多搜索,但没有适合我的问题的解决方案。web.config 中没有重复条目或类似的内容。

这不是什么大问题,但它很烦人。

提前谢谢

©axi

4

1 回答 1

-1

我的设置也遇到了同样的问题,所以我创建了一个 ExceptionLogger 类。然后向它添加一个静态字段以保留它记录的异常列表。然后,当 onException 事件发生时,它会检查记录的最后一个异常以避免记录重复。

public class ExceptionLogger
{
    public static List<Exception> loggedExceptions = new List<Exception>();

    public static void LogException(Exception e) {

...

    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);
        var e = context.Exception;

        if (!e.Equals(ExceptionLogger.loggedExceptions.Last()))
        {
            ExceptionLogger.LogException(e);
        }

     }
于 2014-03-20T20:43:58.910 回答