5

Ich habe einen Fehlerhandler in meinem global.asax wie folgt;Wie Protokollierungsfehler für Bilder in globalen asax ignorieren

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 

Offensichtlich funktioniert dies sehr gut und schickt mir eine E-Mail, wenn ein Fehler auftritt. Dies gilt jedoch auch für alle Bilder, die nicht im Dateisystem gefunden werden. Es gibt mir eine "Datei existiert nicht." Error. Gibt es eine Möglichkeit, Protokollierungsfehler für Bilder zu ignorieren, die sich nicht auf der Festplatte befinden?

+1

nicht wirklich eine Antwort, da es eine große Abweichung von der aktuellen Lösung ist, aber mit [ELMAH (Error Logging Module und Handlers)] (http://code.google.com/p/elmah /) Sie können dies und viele andere Aspekte der Fehlerprotokollierung konfigurieren. –

+0

@michielvoo das ist, wie ich mit diesem Problem endete. Mit NuGet war es ganz einfach, ELMAH herunterzuladen und in nur 10 Sekunden einzurichten. –

Antwort

1

Ich weiß, dass dies sehr einfach klingt, oder ganz einfach, oder Sie können für den Fehlercode suchen, aber das ist, was ich tue - einfache Überprüfung, ob der Fehler die Nachricht von dose not exist enthält:

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

Ich habe eigentlich das selbe Problem. Gibt es eine Möglichkeit, den Namen der fehlenden Ressource zu erhalten (existiert nicht)? Manchmal müssen Seiten, die nicht existieren, per E-Mail an mich gesendet werden, damit eine Untersuchung stattfinden kann. – cbillowes

+0

@kleinkie Ich protokolliere den vollen Fehler und überprüfe sie. Ich schlage vor, Sie nur zu protokollieren und nicht per E-Mail, denn wenn jemand aus irgendeinem Grund versucht, viele nicht vorhandene Seiten zu laden, werden Sie voll mit E-Mails. In meinem Server habe ich hundert dieser Zeile mit "existiert nicht" jede Woche. – Aristos

+0

Danke, das tue ich, ich vergesse nur manchmal die Fehler zu überprüfen. Ich werde einfach einen einfachen täglichen Bericht schreiben, der mir automatisch per E-Mail zugesandt wird, damit ich nach verdächtigen Fehlern suchen kann. =) – cbillowes

5

Können Sie die FileNotFoundException nicht auflösen? Wenn die Ausnahme nicht auftreten sollte, beheben Sie das Problem lieber, als es zu unterdrücken. Um eine bekannte Ausnahme zu behandeln, können Sie den folgenden Code verwenden.

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  
}