2012-12-18 13 views
5

Global.asax'ımda aşağıdaki gibi bir hata işleyicim var;Genel asakstaki resimler için günlüğe kaydetme hataları nasıl yoksayılır

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
     ' Code that runs when an unhandled error occurs 
     Dim ex = Server.GetLastError.GetBaseException 
     Dim lastErrorWrapper As HttpException = Server.GetLastError() 
     Dim lastError As Exception = lastErrorWrapper 

     If lastErrorWrapper.InnerException IsNot Nothing Then 
      lastError = lastErrorWrapper.InnerException 
     End If 

     My.ErrorHandler.LogError(_ 
      "<BR/><BR/>URL: " & Request.RawUrl & _ 
      "<BR/><BR/>STACK: " & ex.StackTrace & _ 
      "<BR/><BR/>SOURCE: " & ex.Source & _ 
      "<BR/><BR/>MESSAGE: " & ex.Message & _ 
      "<BR/><BR/>TYPENAME: " & ex.GetType.ToString & _ 
      "<BR/><BR/>INNER EXCEPTION: " & lastError.ToString & _ 
      "<BR/><BR/>REFERRER: " & HttpContext.Current.Request.Url.AbsoluteUri & _ 
      "<BR/><BR/>USER IP: " & Request.ServerVariables("REMOTE_ADDR") & " -- " & Request.ServerVariables("HTTP_USER_AGENT")) 
    End Sub 

Açıkçası, bu harika çalışıyor ve bir hata olduğunda bana bir e-posta gönderir. Ancak bu, dosya sisteminde bulunmayan resimler için de geçerlidir. Bana "Dosya yok" veriyor. hata. Diskte bulunmayan görüntüler için günlüğe kaydetme hatalarını görmezden gelmenin bir yolu var mı?

+1

Sorumun cevabı değil, bu ancak [ELMAH (Hata Günlüğü Modüller ve Yükleyici)] ile (Geçerli çözeltisinden büyük sapma beri http://code.google.com/p/elmah /) bunu ve hata günlüğünün diğer birçok özelliğini yapılandırabilirsiniz. –

+0

@michielvoo, bu problemi nasıl çözdüm. NuGet ile ELMAH'ı indirmek ve sadece 10 saniye içinde kurmak oldukça kolaydı. –

cevap

1

bu çok kolay ya da çok basit geliyor biliyorum, yoksa hata kodunu aramak olabilir, ama bu benim yaptığım - Hata dose not exist mesajını içeriyorsa basit çek:

lastErrorWrapper.ToString().Contains("does not exist.") 
+0

Aslında bende aynı problem var. Eksik olan kaynağın adını elde etmek için herhangi bir yolu var mı (var değil)? Bazen mevcut olmayan sayfaların bir e-postayla gönderilmesi gerekir, böylece bir soruşturma yapılabilir. – cbillowes

+0

@kleinkie Tüm hatayı günlüğe kaydeder ve kontrol ederim. Sadece oturum açmanızı ve e-postayla göndermemenizi öneriyorum, çünkü herhangi bir nedenden ötürü herhangi bir nedenle mevcut olmayan birçok sayfayı yüklemeye başladığınızda, e-postalarla dolu olacaksınız. Sunucumda her hafta "yok" ile bu çizgiden yüz tane var. – Aristos

+0

Teşekkürler, işte yaptığım şey, bazen hataları kontrol etmeyi unutuyorum. Şüpheli hataları kontrol edebilmem için otomatik olarak bana e-postayla gönderilecek basit bir günlük rapor yazacağım. =) – cbillowes

5

Bunun yerine FileNotFoundException çözdünüz mü? İstisna oluşmazsa, sorunu bastırmaktan ziyade çözebilirsiniz. Bilinen bir özel durumla başa çıkmak için aşağıdaki kodu kullanabilirsiniz. Gerçekten

if(Server.GetLastError().GetBaseException() is System.Web.HttpException) 
{ 
    //You could check whether the 
    //Server.GetLastError().GetBaseException().Message contains the appropriate message 
    Debug.WriteLine("Suppressed FileNotFoundException"); 
}else 
//Log an unhandled exception 
2
var ex = Context.Error; 

if (ex is HttpException) 
{ 
    var httpException = (HttpException)ex; 

    if (httpException.GetHttpCode() == (int)HttpStatusCode.NotFound) 
     return; // Do nothing 404  
} 
İlgili konular