2012-12-18 19 views
5

Mam obsługi błędów w moim global.asax w następujący sposób;Jak zignorować błędy rejestrowania obrazów w globalnym asax

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 

Oczywiście działa to świetnie i wysyła mi e-mail, gdy wystąpi błąd. Ale dotyczy to również obrazów, których nie ma w systemie plików. Daje mi "Plik nie istnieje". błąd. Czy istnieje sposób na zignorowanie błędów rejestrowania obrazów, które nie znajdują się na dysku?

+1

Niezupełnie odpowiedź, ponieważ jest to duże odchylenie od obecnego rozwiązania, ale z [ELMAH (błąd Moduły rejestrowania i Rączki)] (http://code.google.com/p/elmah /) możesz skonfigurować to i wiele innych aspektów rejestrowania błędów. –

+0

@michielvoo tak właśnie skończyłem z tym problemem. z NuGet było dość łatwo pobrać ELMAH i ustawić go w zaledwie 10 sekund. –

Odpowiedz

1

Wiem, że brzmi to bardzo proste, albo bardzo proste, albo możesz szukać kodu błędu, ale to, co robię - proste sprawdzenie, czy błąd zawiera przesłanie dose not exist:

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

Mam ten sam problem w rzeczywistości. Czy istnieje sposób na uzyskanie nazwy zasobu, którego brakuje (nie istnieje)? Czasami strony, które nie istnieją, muszą być wysłane do mnie e-mailem, aby można było przeprowadzić dochodzenie. – cbillowes

+0

@kleinkie Loguję pełny błąd i je sprawdzam. Proponuję po prostu go zalogować, a nie e-mailem, ponieważ jeśli ktoś z jakiegokolwiek powodu zacznie próbować załadować wiele nieistniejących stron, będzie pełen e-maili. Na moim serwerze mam setki tej linii z "nie istnieje" co tydzień. – Aristos

+0

Dzięki, właśnie to robię, czasami zapominam sprawdzić błędy. Po prostu napiszę prosty codzienny raport, który zostanie automatycznie wysłany do mnie e-mailem, aby sprawdzić ewentualne podejrzane błędy. =) – cbillowes

5

Czy zamiast tego możesz rozwiązać wyjątek FileNotFoundException? Jeśli wyjątek nie powinien wystąpić, raczej rozwiąż problem, niż go pomiń. Aby obsłużyć znany wyjątek, możesz użyć następującego kodu.

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  
} 
Powiązane problemy