webForumDet fria alternativet

Debugga webbplats

13 svar · 738 visningar · startad av Addeladde

AddeladdeMedlem sedan jan. 20013 406 inlägg
#1

Hej

Finns det något smart sätt med att få felmeddelanden som uppstår på en webbplats. Alltså ASP-felmeddelandena. Så att de sparas någonstans eller kommer som mail.

Kansek On error resume next högst upp på sidan och sedan längst ner ha någon form av catch som fångar upp om det uppstått fel.

Finns kanske smartare sätt.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#2

Har du tillgång till inställningar i IIS'en, kan du ju ändra 500-100-sidan till att spara all data i errorobjektet till t.ex. databas. Då har du en fellog.

TroxyMedlem sedan mars 20041 505 inlägg
#3

Du kan göra alla möjliga saker med dina felmeddelanden. Exempelvis spara i databas eller textfiler.

http://www.4guysfromrolla.com/webtech/060399-1.shtml

AddeladdeMedlem sedan jan. 20013 406 inlägg
#4

OveRRidE lösning verkar ju mycket bekvämare då man inte måste in i koden på varje sida för att hitta felmeddelandena. Finns det några begränsningar i den lösningen?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Addeladde skrev:

OveRRidE lösning verkar ju mycket bekvämare då man inte måste in i koden på varje sida för att hitta felmeddelandena. Finns det några begränsningar i den lösningen?

Har du själv kontroll över IIS'en, så ser jag ingen direkt anledning att välja "On Error Resume Next" framför att göra en egen 500-100-sida.

AddeladdeMedlem sedan jan. 20013 406 inlägg
#6

Jag har kontroll över 500-100 sidan. Någon som har ett exempel?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

Experimentera lite, och läs av .Number, .Source, .Description och liknande på Err-objektet. Spara datat (plus ev. querystring-, form-, application- eller sessionsamlingar) till databas. Sen gör du .Clear och skriver ut ett "vänligt" felmeddelande till klient.

emissionMedlem sedan dec. 19996 721 inlägg
#8

Server.ASPError är din vän. Betydligt intressantare än Err-objektet, tycker jag.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#9

Err objektet har man inte mycket nytta av på sin 500-100 sida. Däremot så får man ut vettig info från Server.GetLastError. :)
http://www.devguru.com/technologies/asp/9168.asp

OveRRidEMedlem sedan feb. 200112 078 inlägg
#10

Fel av mig, fast i VB-tänket. ;)

AddeladdeMedlem sedan jan. 20013 406 inlägg
#11

Gjorde en felsida:

<%@ language="VBScript" %>
<%
  'Option Explicit

  Const lngMaxFormBytes = 200

  Dim objASPError, blnErrorWritten, strServername, strServerIP, strRemoteIP
  Dim strMethod, lngPos, datNow, strQueryString, strURL, strErrorMessage

  If Response.Buffer Then
    Response.Clear
    Response.Status = "500 Internal Server Error"
    Response.ContentType = "text/html"
    Response.Expires = 0
  End If

  Set objASPError = Server.GetLastError
	
	Sub sendMail(mailFrom, mailTo, mailCc, mailBcc, mailSubject, mailBody, mailformat)
 
			'Fixa så att mailet skickas även om mailadressen är felaktig.
		If Not instr(mailFrom, "@") > 0 Then
				mailFrom = "unkwown@unknown.se"
		End If
		sch = "http://schemas.microsoft.com/cdo/configuration/" 
			Set cdoConfig = Server.CreateObject("CDO.Configuration") 
			cdoConfig.Fields.Item(sch & "sendusing") = 2 
			cdoConfig.Fields.Item(sch & "smtpserver") = "localhost"
			cdoConfig.Fields.Item(sch & "smtpconnectiontimeout") = 10 
			cdoConfig.Fields.Item(sch & "smtpserverport") = 25 
			cdoConfig.Fields.update 
	 
			Set cdoMessage = Server.CreateObject("CDO.Message") 
			Set cdoMessage.Configuration = cdoConfig 
			cdoMessage.From = mailFrom
			cdoMessage.To = mailTo 
		'bc och bcc
		 If mailCc <> "" Then
				cdoMessage.Cc = mailCc
			 End If
			If mailBcc <> "" Then
				cdoMessage.Bcc = mailBcc
			End If  
			cdoMessage.Subject = mailSubject 
			'Textmail
		If UCASE(mailformat) = "TEXT" Or mailformat = "" Then 
			cdoMessage.TextBody = mailBody 
		'Html Mail
		Else
			cdoMessage.HTMLBody = mailBody 	  
		End If
			cdoMessage.Send 
			Set cdoMessage = Nothing 
			Set cdoConfig = Nothing 
	End Sub

Response.Write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">"
Response.Write "<HTML><HEAD><TITLE>The page cannot be displayed</TITLE>"
Response.Write "<META HTTP-EQUIV=""Content-Type"" Content=""text/html; charset=Windows-1252"">"
Response.Write "<link href=""http://www.ilearn.se/stilmall.css"" rel=""stylesheet"" type=""text/css"">"
Response.Write "<link href=""http://www.ilearn.se/stilmallMall.css"" rel=""stylesheet"" type=""text/css"">"
Response.Write "</HEAD><BODY>"

strErrorMessage = strErrorMessage  & "<STYLE type=""text/css"">"
strErrorMessage = strErrorMessage  & "  BODY, p, li, span { font-family: Verdana, Tahoma, Arial, Helvetica; font-size: 11px; }"
strErrorMessage = strErrorMessage  & "  H1 { font-family: Arial, Helvetica; font-size: 14px; font-weight: bold; }"
strErrorMessage = strErrorMessage  & "  H2 { font-family: Arial, Helvetica; font-size: 12px; font-weight: bold; }"
strErrorMessage = strErrorMessage  & "  A:link { color: red }"
strErrorMessage = strErrorMessage  & "  A:visited { color: maroon }"
strErrorMessage = strErrorMessage  & "</STYLE>"

strErrorMessage = strErrorMessage  & "<TABLE width=500 border=0 cellspacing=10><TR><TD>" 
strErrorMessage = strErrorMessage  & "<p>Felmeddelande:</p>" 
strErrorMessage = strErrorMessage  & "<ul>" 
strErrorMessage = strErrorMessage  & "<li>Error Type:<br>" 

  Dim bakCodepage
  on error resume next
	bakCodepage = Session.Codepage
	Session.Codepage = 1252
  on error goto 0
  strErrorMessage = strErrorMessage  & Server.HTMLEncode(objASPError.Category)
  If objASPError.ASPCode > "" Then strErrorMessage = strErrorMessage  & Server.HTMLEncode(", " & objASPError.ASPCode)
    strErrorMessage = strErrorMessage  & Server.HTMLEncode(" (0x" & Hex(objASPError.Number) & ")" ) & "<br>"
  If objASPError.ASPDescription > "" Then 
	strErrorMessage = strErrorMessage  & Server.HTMLEncode(objASPError.ASPDescription) & "<br>"
  elseIf (objASPError.Description > "") Then 
	strErrorMessage = strErrorMessage  & Server.HTMLEncode(objASPError.Description) & "<br>" 
  end if
  blnErrorWritten = False
  ' Only show the Source if it is available and the request is from the same machine as IIS
  If objASPError.Source > "" Then
    strServername = LCase(Request.ServerVariables("SERVER_NAME"))
    strServerIP = Request.ServerVariables("LOCAL_ADDR")
    strRemoteIP =  Request.ServerVariables("REMOTE_ADDR")
    If (strServerIP = strRemoteIP) And objASPError.File <> "?" Then
      strErrorMessage = strErrorMessage  & Server.HTMLEncode(objASPError.File)
      If objASPError.Line > 0 Then strErrorMessage = strErrorMessage  & ", line " & objASPError.Line
      If objASPError.Column > 0 Then strErrorMessage = strErrorMessage  & ", column " & objASPError.Column
      strErrorMessage = strErrorMessage  & "<br>"
      strErrorMessage = strErrorMessage  & "<font style=""COLOR:000000; FONT: 8pt/11pt courier new""><b>"
      strErrorMessage = strErrorMessage  & Server.HTMLEncode(objASPError.Source) & "<br>"
      If objASPError.Column > 0 Then strErrorMessage = strErrorMessage  & String((objASPError.Column - 1), "-") & "^<br>"
      strErrorMessage = strErrorMessage  & "</b></font>"
      blnErrorWritten = True
    End If
  End If
  If Not blnErrorWritten And objASPError.File <> "?" Then
    strErrorMessage = strErrorMessage  & "<b>" & Server.HTMLEncode(  objASPError.File)
    If objASPError.Line > 0 Then strErrorMessage = strErrorMessage  & Server.HTMLEncode(", line " & objASPError.Line)
    If objASPError.Column > 0 Then strErrorMessage = strErrorMessage  & ", column " & objASPError.Column
    strErrorMessage = strErrorMessage  & "</b><br>"
  End If
strErrorMessage = strErrorMessage  & "</li>" 
strErrorMessage = strErrorMessage  & "<li>Browser Type:<br>" 

strErrorMessage = strErrorMessage  & Server.HTMLEncode(Request.ServerVariables("HTTP_USER_AGENT")) 

strErrorMessage = strErrorMessage  & "<br><br></li>" 
strErrorMessage = strErrorMessage  & "<li>Page:<br>" 

  strMethod = Request.ServerVariables("REQUEST_METHOD")
  strErrorMessage = strErrorMessage  & strMethod & " "
  If strMethod = "POST" Then
    strErrorMessage = strErrorMessage  & Request.TotalBytes & " bytes to "
  End If
  strErrorMessage = strErrorMessage  & Request.ServerVariables("SCRIPT_NAME")
  strErrorMessage = strErrorMessage  & "</li>"
  If strMethod = "POST" Then
    strErrorMessage = strErrorMessage  & "<p><li>POST Data:<br>"
    ' On Error in case Request.BinaryRead was executed in the page that triggered the error.
    On Error Resume Next
    If Request.TotalBytes > lngMaxFormBytes Then
      strErrorMessage = strErrorMessage  & Server.HTMLEncode(Left(Request.Form, lngMaxFormBytes)) & " . . ."
    Else
      strErrorMessage = strErrorMessage  & Server.HTMLEncode(Request.Form)
    End If
    On Error Goto 0
    strErrorMessage = strErrorMessage  & "</li>"
  End If

strErrorMessage = strErrorMessage  & "<br><br></li>" 
strErrorMessage = strErrorMessage  & "<li>Time:<br>" 

  datNow = Now()
  strErrorMessage = strErrorMessage  & Server.HTMLEncode(FormatDateTime(datNow, 1) & ", " & FormatDateTime(datNow, 3))
  on error resume next
	Session.Codepage = bakCodepage 
  on error goto 0

strErrorMessage = strErrorMessage  & "<br><br></li>" 
strErrorMessage = strErrorMessage  & "</TD></TR></TABLE>" 

Response.Write "<span class=""FetBla"" style=""color: #FF0000;"">Ett fel uppstod</span> "
Response.Write "				<p>Ett tekniskt fel uppstod i applikationen. <br>"
Response.Write "				  Detta felmeddelande loggas och kommer att r&auml;ttas till inom kort. <br>"
Response.Write "				  <br>"
Response.Write "				  Testa g&auml;rna det du gjorde igen och se om det fungerar. <br>"
Response.Write "          </p>"

Call sendMail("support@local", "support@local", "", "", "felmeddelande", strErrorMessage, "HTML")

Response.write("</BODY></HTML>")
%>
MickeA.comMedlem sedan feb. 20034 441 inlägg
#12

Tjena
Jag har lite problem med vårt tyska webbhotell.
Problem är att jag inte får några felmeddelanden alls, utan endast:

Es trat ein Script-Fehler auf w&#65533;hrend die URL bearbeitet wurde. Bitte informieren Sie den Webseiten-Administrator.

Det hjälper inte till så himla mycket när man väl dyker på ett ASP fel.
Jag har varit i kontakt med supporten och frågat om dom inte kan slå på funktionen för att skicka Asp Felmess till browsern, för det är tydligen avstängd.

Jag vet inte vad det beror på (förmodligen att dom inte förstår vad jag menar) men jag hittar ingen lösning på problemet.

Så, hur ska använda koden ovan för att få ut lite felmess under körning?
Jag har testat med det här getLastError, men det skrivs aldrig ut något, trots att jag vet att det är fel på sidan..

Tacksam för alla förslag!

@ndersMedlem sedan juni 200032 969 inlägg
#13

Egen "gammal hederlig" felhantering?

on error resume next
...
...
' kod som kan generera fel
' kontrollera:
if err.number <> 0 then
     response.write err.number & ": " & err.description
     err.clear
end if

Dessvärre kan man inte med denna metod ta reda på på vilken rad felet inträffade, utan du får slänga ut kontrollkod lite här och där efter kodblock som kan generera fel.

MickeA.comMedlem sedan feb. 20034 441 inlägg
#14

Aha okej.
Jag Googlade lite på felmeddelandet och kom fram till vad som var fel.
Det beror med all sannolikhet att webbhotellet i fråga (Strato.de) har en spärr som gör att mail som inte går inom domänen spärras och tas bort.

Det som (inte) händer med sajten är att ett mail aldrig skickas, som ska skickas.
Samma script funkar om jag anger en mottagadress som ligger inom samma domän.

Så jag sitter nu med webbhotellets livechat vilket inte är det bästa, eftersom jag har lite svårt med tyskan och dom med engelskan.

Vi får se var det slutar det här.

Tack!

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)