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 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 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
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
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.
Jag har kontroll över 500-100 sidan. Någon som har ett exempel?
OveRRidEMedlem sedan feb. 200112 078 inlägg 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 Server.ASPError är din vän. Betydligt intressantare än Err-objektet, tycker jag.
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 Fel av mig, fast i VB-tänket. ;)
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ättas till inom kort. <br>"
Response.Write " <br>"
Response.Write " Testa gä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>")
%>
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�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 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.
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!