Automatisk fejlfinding i ASP

Tags:    asp
Skrevet af Bruger #2243 @ 26.10.2002
Automatisk fejlfinding i ASP3

Fejl opstår når man programmerer. Ligemeget om det er i software, på internettet eller andre steder. Hvem har ikke på nettet set de kendte fejl-sider med 'Siden kunne ikke vises' eller lignende. Dog er det din måde, at behandle fejlen på der er afgørende. Hvis en fejl konsekvent opstår på ens website og den samme standard-besked bliver vist hver gang, vil brugerne til sidst forlade ens website i raseri og frustration.

Dette kan der nu laves om på ved hjælp af VBScript og de nye indbyggede metoder i ASP3.

Her kan man bruge den nye 'On Error Statement', 'Err Objektet' samt 'ASPError objektet' for at fange de fejl der måtte opstå på websitet. Derud over kan man selv i IIS 5 lave sine egne standard fejl-sider. Dog vil denne artikel kun omhandle de første måder.

The On Error Statement Denne angivelse bruges til, at behandle fejl i VBScript. Hvis denne ikke bliver brugt, og en fejl opstår et eller andet sted på siden, vil siden blive afsluttet og den kendte IIS fejl-meddelelse vil blive vist. For at dette ikke skal ske kan der i stedet bruges angivelsen 'On Error Resume Next'. Denne sættes inden en kode-del hvor en fejl kan opstå og vil hoppe ud af koden hvis en der opstår en fejl. Idéen med denne angivelse er dog ikke kun at ignorere fejlen, men at gøre sådan så ens side ikke afsluttes og standard fejl-siden ikke vises så man i stedet kan udskrive en venlig fejl-meddelelse til brugeren. Til dette formål bruges 'Err' objektet.

Err objektet Dette objekt bruges for, at fange de fejl der måtte opstå og skrive en fejl-meddelelse til brugeren. Objektet indeholder følgende 5 "properties": Err.Number - Denne bruges til at fange det specielle VBScript fejl-nummer. Err.Description - Indeholder en beskrivelse af fejlen. Err.Source - Indeholder den del af koden hvor fejlen opstod. Err.Clear - Denne kan bruges til sidst for at tømme objektet. Err.Raise - Denne metode kan bruges til at lade en Runtime-fejl opstå.

Nu har vi 2 vigtige værktøjer til at fange fejlen og sørge for at den ikke afslutter siden. Derud over kan vi nu udskrive vores egen standard fejl-meddelelse til brugeren. Alt dette gøres således:

On Error Resume Next

...... Noget kode hvor der muligvis kunne opstå en fejl .......

If Err.Number > 0 Then
Response.Write("<h3>Følgende fejl opstod, da siden blev kørt:</h3>")
Response.Write("<b>Fejlens nummer:</b> " & Err.Number)
Response.Write("<b>Beskrivelse af fejlen:</b> " & Err.Description)
Response.Write("<b>Fejlen opstod i følgende del af koden:</b> " & Err.Source)
Err.Clear
End If
Dette var kun et eksempel på hvordan en fejl-meddelelse kunne se ud. Det er stort set kun fantasien der sætter grænser.

ASPError objektet Dette objekt bruges til, at få forskellige informationer omkring fejlen hvis den opstår på en side der er blevet kørt af IIS. ASPError objektet indeholder følgende "properties": ASPCode - Fejl-koden udskrevet af IIS. Number - Fejlens nummer. Kan f.eks. være et VBScript fejl-nummer. Source - Den del/linie i koden der gjorde at fejlen opstod. File - Navnet på den ASP-side (fil) hvor fejlen opstod. Line - Nummeret på den linie hvor fejlen opstod Column - Nummeret på den række i den linie hvor fejlen opstod. Category - Fejlens type. ASPDescription - Beskrivelse af fejlen der opstod fra IIS. Description - Den almindelige beskrivelse af fejlen. Kunne f.eks. være en VBScript fejl-meddelelse.

Alle disse informationer kan bruges ligesom i det forige eksempel således:

On Error Resume Next

...... Noget kode hvor der muligvis kunne opstå en fejl .......

If Err.Number > 0 Then
Response.Write("<h3>Følgende fejl opstod, da siden blev kørt:</h3>")
Response.Write("<b>Siden hvor fejlen opstod:</b> " & Err.File)
Response.Write("<b>Nummeret på linien hvor fejlen opstod:</b> " & Err.Line)
Response.Write("<b>Fejlens nummer:</b> " & Err.Number)
Response.Write("<b>Beskrivelse af fejlen:</b> " & Err.Description)
Response.Write("<b>Fejlen opstod i følgende del af koden:</b> " & Err.Source)
osv....
Err.Clear
End If
Som du nok har fundet ud af bruges Err-objektet også her til for at udskrive de informationer der skal bruges.

Ud over de ovennævnte måder at håndtere en fejl på kan man også fange fejlen ved hjælp af ASPError objektet for derefter at lægge fejlen ind i IIS-loggen. Dette gøres på følgende måde:

On Error Resume Next

' Først laver vi nogle variabler, som vi kan komme informationerne fra fejlen ned i
Dim objASPError, theASPError, theNumber, theDescription, theSource, theLine
Dim theFile, osv.......

' I dette eksempel bruger vi Server.GetLastError for at fange den sidst opståede fejl
' og lægge den ind i vores objekt (objASPError)
Set objASPError = Server.GetLastError

' Herefter lægger vi de informationer vi skal bruge ned i de variabler vi lavede før
theASPError = objASPError.ASPCode
theNumber = objASPError.Number
theDescription = objASPError.Description
theSource = objASPError.Source
theLine = objASPError.Line
theFile = objASPError.File
osv.....

' Til sidst lægger vi de indsamlede informationer ind i IIS-logen
Response.AppendToLog(theASPError)
Response.AppendToLog(theNumber)
Response.AppendToLog(theDescription)
Response.AppendToLog(theSource)
Response.AppendToLog(theLine)
Response.AppendToLog(theFile)
Dog er denne måde at håndtere fejl ikke den mest optimale. Det ville være mere optimalt f.eks. at lave sin egen log i IIS hvor fejlen kunne blive lagt eller at bruge et Email-komponent til at sende en email hver gang en fejl opstår på siden. Eller lave sin egen "fejl-behandler". Mulighederne er mange for at fange en fejl når den opstår. Men med de ovennævnte metoder kan man nu også behandle sine fejl på server-siden i ASP.

God fornøjelse med fejlfindingen....



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #2208 @ 06.01.04 18:49
Hejsa,

Jeg faldt lige over denne artikel, men fandt en fejl. Når jeg prøver at køre fejlfindingen virker det kun hvis jeg vender "næbbet" om:

If Err.Number > 0 Then
istedet for
If Err.Number < 0 Then
User
Bruger #2243 @ 18.02.04 02:43
Ja den havde jeg ikke lige luret. Det er en taste-fejl fra min side... Men tak for at der blev mindet om det :)
Du skal være logget ind for at skrive en kommentar.
t