SORU
20 NİSAN 2009, PAZARTESİ


Nasıl ASP.NET MVC [HandleError] özniteliği ile çalışmak ELMAH almak için?

ELMAH benim kontrol ELMAH [HandleError] özniteliği ortaya çıktığında herhangi bir hata günlüğü gelmez kullandığımda ASP.NET MVC benim uygulama hataları, ancak oturum açmak için kullanmaya çalışıyorum.

ELMAH sadece işlenmeyen bir hata günlükleri ve [HandleError] özniteliği işte bu yüzden, hata işleme, çünkü tahmin ediyorum olarak kaydetmemiz gerekiyor.

Nasıl değiştiririm veya nasıl ELMAH bir hata olduğunu biliyorum ve.. günlük böylece öznitelik değiştirme hakkında gitmek istiyorsunuz

Düzenleme:İzin ver emin ol herkes anlar, ben bilmem değiştirme özniteliği değil soru soruyorum... ELMAH alır bypass kullanırken handleerror öznitelik anlamı olmaz bakın bu bir hata var çünkü halletmişti tarafından özniteliği... Ne olduğumu soruyor oraya gitmenin bir yolunu ELMAH görmek hata ve günlük bile olsa özniteliği ele...aradım etrafta göremiyorum herhangi bir yöntemi çağırmak için güç için günlük hata....

CEVAP
23 NİSAN 2009, PERŞEMBE


ELMAH dışında günlükleri ve eğer temel uygulama işleme sadece HandleErrorAttribute alt ve OnException üye (kopyalamaya gerek yok) geçersiz kılar. İhtiyacınız olan kodu en alt düzeyde tutar aşağıdaki gibidir:

using System.Web.Mvc;
using Elmah;

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);
        if (!context.ExceptionHandled) 
            return;
        var httpContext = context.HttpContext.ApplicationInstance.Context;
        var signal = ErrorSignal.FromContext(httpContext);
        signal.Raise(context.Exception, httpContext);
    }
}

Temel uygulama önce işlenen istisna işaretlemek için bir şans vererek çağrılır. O zaman durum sinyalini verdi. Yukarıdaki kod basit ve sorunları HttpContext kullanılabilir durumda değil, bir ortamda kullanılan, test gibi neden olabilir. Sonuç olarak, daha defansif olan bir kod (biraz daha uzun olma pahasına) isteyeceksiniz:

using System.Web;
using System.Web.Mvc;
using Elmah;

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);
        if (!context.ExceptionHandled       // if unhandled, will be logged anyhow
            || TryRaiseErrorSignal(context) // prefer signaling, if possible
            || IsFiltered(context))         // filtered?
            return;

        LogException(context);
    }

    private static bool TryRaiseErrorSignal(ExceptionContext context)
    {
        var httpContext = GetHttpContextImpl(context.HttpContext);
        if (httpContext == null)
            return false;
        var signal = ErrorSignal.FromContext(httpContext);
        if (signal == null)
            return false;
        signal.Raise(context.Exception, httpContext);
        return true;
    }

    private static bool IsFiltered(ExceptionContext context)
    {
        var config = context.HttpContext.GetSection("elmah/errorFilter")
                        as ErrorFilterConfiguration;

        if (config == null)
            return false;

        var testContext = new ErrorFilterModule.AssertionHelperContext(
                              context.Exception, 
                              GetHttpContextImpl(context.HttpContext));
        return config.Assertion.Test(testContext);
    }

    private static void LogException(ExceptionContext context)
    {
        var httpContext = GetHttpContextImpl(context.HttpContext);
        var error = new Error(context.Exception, httpContext);
        ErrorLog.GetDefault(httpContext).Log(error);
    }

    private static HttpContext GetHttpContextImpl(HttpContextBase context)
    {
        return context.ApplicationInstance.Context;
    }
}

Bu ikinci sürüm günlüğü gibi tam yapılandırılmış boru hattı, süzme posta içerir ve ne ELMAH error signaling ilk kullanmaya çalışın. Bu olmazsa, hata filtreli olup olmadığını görmeye çalışır. Eğer değilse, hata sadece kaydedilir. Bu uygulama posta bildirimleri işlemez. Eğer durum sinyal olabilir eğer bir mail eğer bunu yapmak için yapılandırılmışsa gönderilecektir.

Ayrıca eğer HandleErrorAttribute birden çok örneğini etkisi varsa o zaman yinelenen günlük oluşmaz dikkat çekmek için olabilir, ama yukarıdaki iki örnek sizin için başlangıç noktası olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • Julia Graf

    Julia Graf

    6 Mayıs 2006
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006