/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Error handling
Fra : Rune Jensen


Dato : 01-06-09 16:21

Jeg er - klog af skade som man siger - ved at lære lidt om error handling.

Nu har jeg læst
http://www.aspdev.org/articles/asp-error-handling/

Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail
til webmaster automatisk, hvis der er fejl på siden.

Jeg har dog nogle spøørgsmå i den forbindelse.

Jeg vil gerne lave sådan et script, men vil også gerne være sikker på,
jeg gør det rigtigt.

Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller
"løbende".

Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der
kan opstå fejl, eller kan man lægge det hele i en sub, som bare kaldes
ved start? Kan man lave en generel on error goto... ? Måske i global.asa
eller lign.

Håber, spørgsmålet er forståeligt;)


MVH
Rune Jensen

 
 
Leif Neland (02-06-2009)
Kommentar
Fra : Leif Neland


Dato : 02-06-09 00:32

Rune Jensen skrev:
> Jeg er - klog af skade som man siger - ved at lære lidt om error handling.
>
> Nu har jeg læst
> http://www.aspdev.org/articles/asp-error-handling/
>
> Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail
> til webmaster automatisk, hvis der er fejl på siden.
>
> Jeg har dog nogle spøørgsmå i den forbindelse.
>
> Jeg vil gerne lave sådan et script, men vil også gerne være sikker på,
> jeg gør det rigtigt.
>
> Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller
> "løbende".
>
> Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der
> kan opstå fejl, eller kan man lægge det hele i en sub, som bare kaldes
> ved start? Kan man lave en generel on error goto... ? Måske i global.asa
> eller lign.
>
Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan
opstå fejl
ON ERROR GOTO 0, hvor asp dør med en fejl 500-side.

Der er ikke en "ON ERROR goto min_egen_errorhandler"

MEN:
http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html

Så kan du lave din egen error-handler-side, der skriver "Beklager,
webmaster er orienteret om fejlen", og emailer eller logger i en database.

Det kræver dog at du har adgang til indstillingerne for IIS, eller kan
få hotelportieren til det; er det et billigt webhotel uden support, har
du nok ikke.

Leif

Stig Johansen (02-06-2009)
Kommentar
Fra : Stig Johansen


Dato : 02-06-09 11:30

Leif Neland wrote:

> Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
> ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan
> opstå fejl

Ja, og man skal huske, at "ON ERROR RESUME NEXT" gælder for resten af
scriptet, så hvis der er en 'bøf' længere nede, fortsætter skidtet uden
yderligere advarsler/fejlmeldinger.

--
Med venlig hilsen
Stig Johansen

Jørn Andersen (04-06-2009)
Kommentar
Fra : Jørn Andersen


Dato : 04-06-09 05:18

On Tue, 02 Jun 2009 01:31:48 +0200, Leif Neland <leif@neland.dk> wrote:

>Der er (så vidt jeg har kunne læse mig til) kun to muligheder:
>ON ERROR RESUME NEXT, hvor man så skal checkke efter hvert sted, der kan
>opstå fejl
>ON ERROR GOTO 0, hvor asp dør med en fejl 500-side.
>
>Der er ikke en "ON ERROR goto min_egen_errorhandler"

Meningen er jo, at hvis man har sat ON ERROR RESUME NEXT, så har man
selv overtaget "ansvaret" for fejl-håndteringen.
Og så må man på passende steder indsætte et check - fx:
<%
Select Case Err.Number
Case 0
' Alt er godt
Case 53
' File Not Found
Case Else
' Noget andet
End Select
%>

I hvert Case kan man så kalde en sub eller hvad man ellers lyster, som
fx smider en venlig fejlmeddelelse til bruger og/eller en mail til
webmaster (eller log) og/eller sørger for at afslutte igangværende ting.

Det er nok mest relevant med fejlcheck, når man kalder filsystemet, en
database eller andre "eksterne" ting.


Mvh. Jørn

--
Jørn Andersen,
Brønshøj

Jørn Andersen (04-06-2009)
Kommentar
Fra : Jørn Andersen


Dato : 04-06-09 05:30

On Mon, 01 Jun 2009 17:21:09 +0200, Rune Jensen
<runeofdenmark@gmail.com> wrote:

>Jeg er - klog af skade som man siger - ved at lære lidt om error handling.

Det er vi nok nogen, der burde bruge noget mere

>Nu har jeg læst
>http://www.aspdev.org/articles/asp-error-handling/
>
>Og jeg synes, det er en rigtig god idé den med, at man kan sende en mail
>til webmaster automatisk, hvis der er fejl på siden.
>
>Jeg har dog nogle spøørgsmå i den forbindelse.
>
>Jeg vil gerne lave sådan et script, men vil også gerne være sikker på,
>jeg gør det rigtigt.
>
>Men jeg er i tvivl om, om error-handleren tjekker for fejl linært eller
>"løbende".

Den forstår jeg ikke - ?

>Hvad jeg mener er, skal man have fejltjekket ind hvert sted, hvor der
>kan opstå fejl

Det kommer an på, hvad formålet med fejlhåndteringen er.
Hvis du fx skal registrere en brugers input i en database (fx en ordre),
så giver det god mening at checke, om der er fejl, når du åbner
Connection-objektet, eller om SQL'en giver fejl.
I modsat fald vil brugeren måske tro, at ordren er afgivet, selv om det
ikke er tilfældet.

Hvis du "bare" vil registrere om der i det hele taget har været fejl
under script-afviklingen, kan du nøjes med at checke, inden du evt. igen
sætter On Error Goto 0 - fx:

<%
On Error Resume Next
' En masse kode, som muligvis kan give fejl

If Err.Number <> 0 Then
' Noget fejl-rutine
End If

On Error Goto 0
%>


>Håber, spørgsmålet er forståeligt;)

Ved ikke helt ...


Good luck!

--
Jørn Andersen,
Brønshøj

Rune Jensen (05-06-2009)
Kommentar
Fra : Rune Jensen


Dato : 05-06-09 23:59

Jørn Andersen skrev:

>> Håber, spørgsmålet er forståeligt;)
>
> Ved ikke helt ...

Hvis der når man har rettet, sker utilsigtede ting andre steder i scriptet.

Lad os sige, jeg retter øverst i dokumentet, men at det medfører en fejl
senere, som jeg ikke opdager. En catchall fejlrutine vil opfange denne
fejl, og med det samme sende en mail (f.eks.).

Jeg overvejede en løsning med fjernovervågning af websted. Men siden jeg
kører med en del brugerafhængigt script (bl.a. IP-tjek), og eftersom der
jo også kan opstå fejl ved POST, er det for det første ikke sikkert en
sådan overvågnning vil fange fejlen (alt andet end 200 OK), og for det
andet, så vil det kræve load, omend ikke meget på serveren.

Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet
"ikke-lineært" og opfanger fejlen, som derefter udfører en
fejludskrivning i én selvstændig function/subrutine til brugeren og
sender en mail til webmaster.

Med ikke-lineært mener jeg derfor en rutine, som virker som Javascripts
on- f.eks. onclick, som opfanger alle museklik uafhængigt af resten af
scriptet, som man derefter kan behandle ét sted.

Det er tydeligvis ikke muligt at lave.. og en fejlrutine, som skal
installeres alle steder, det kan gå galt, det er selvfølgelig nok
rekommenderet, men også mere besværligt.


MVH
Rune Jensen

Leif Neland (06-06-2009)
Kommentar
Fra : Leif Neland


Dato : 06-06-09 00:06

Rune Jensen skrev:
>
> Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet
> "ikke-lineært" og opfanger fejlen, som derefter udfører en
> fejludskrivning i én selvstændig function/subrutine til brugeren og
> sender en mail til webmaster.
>
> Med ikke-lineært mener jeg derfor en rutine, som virker som Javascripts
> on- f.eks. onclick, som opfanger alle museklik uafhængigt af resten af
> scriptet, som man derefter kan behandle ét sted.
>
> Det er tydeligvis ikke muligt at lave.. og en fejlrutine, som skal
> installeres alle steder, det kan gå galt, det er selvfølgelig nok
> rekommenderet, men også mere besværligt.
>

Læste du ikke mit indlæg fra 02-06-2009 01:31?
Jeg har gjort som beskrevet her:
http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html


Her er et eksempel på en fejlmeddelelse, der er gemt i databasen:

d
176412
dt
05-06-2009 09:50:01
url
http://www.***.dk/print.asp
aspFile
/config/config.asp
aspLine
3
aspColumn
4
errDesc
Name redefined
errNumber
0x800A0411
errLine
DIM Database,ParentId
ip
66.249.65.71
ua
Mozilla/5.0 (compatible; Googlebot/2.1;
+http://www.google.com/bot.html)
method
GET
data
id=12189

Rune Jensen (06-06-2009)
Kommentar
Fra : Rune Jensen


Dato : 06-06-09 07:19

Leif Neland skrev:
> Rune Jensen skrev:
>>
>> Derfor overvejede jeg en fejlrutine, som "overvåger" selve scriptet
>> "ikke-lineært" og opfanger fejlen, som derefter udfører en
>> fejludskrivning i én selvstændig function/subrutine til brugeren og
>> sender en mail til webmaster.

> Læste du ikke mit indlæg fra 02-06-2009 01:31?
> Jeg har gjort som beskrevet her:
> http://classicasp.aspfaq.com/general/how-do-i-log/track-asp-errors-on-my-web-site.html

<CLIP: fejldump>

En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har
installeret IIS, som jeg ikke har..

Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men
opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis en
side ikke findes. Jeg får en standard fejlside.


MVH
Rune Jensen

Leif Neland (06-06-2009)
Kommentar
Fra : Leif Neland


Dato : 06-06-09 07:32

Rune Jensen skrev:

>
> <CLIP: fejldump>
>
> En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har
> installeret IIS, som jeg ikke har..
>

Hvilken webserver bruger du så?
Mig bekendt er der kun Microsofts IIS, der kan køre asp.

Sun Java System Active Server Pages 4.0, tidligere chillisoft asp:
"Sun Java System Active Server Pages has entered its End Of Life (EOL)
Users of Sun Active Server Pages are encouraged to begin evaluating
alternative server-side scripting technologies."

> Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men
> opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis en
> side ikke findes. Jeg får en standard fejlside.
>
Du skal også ind i serveropsætningen (for den virtuelle
server/"webhotelværelse") og angive at der skal bruges en anden
500-fejlside.

Leif

Rune Jensen (06-06-2009)
Kommentar
Fra : Rune Jensen


Dato : 06-06-09 11:46

Leif Neland skrev:
> Rune Jensen skrev:
>
>>
>> <CLIP: fejldump>
>>
>> En elegant løsning, ja. Men så vidt jeg kan se, kræver det, at man har
>> installeret IIS, som jeg ikke har..
>>
>
> Hvilken webserver bruger du så?
> Mig bekendt er der kun Microsofts IIS, der kan køre asp.

OK, den var ikke formuleret vel ;)

Jeg har ikke IIS på min egen PC, hvorfor jeg heller ikke kan køre
programmet som beskrevet. IIS kræver en Win "professional", som er
dyrere end normal windows, men ikke bedre.


>> Der står så, at ASP henter sine fejlsider på ROOT/[fejlkode].asp. Men
>> opretter jeg f.eks. en 404.asp i roden, bliver den ikke hentet, hvis
>> en side ikke findes. Jeg får en standard fejlside.
>>
> Du skal også ind i serveropsætningen (for den virtuelle
> server/"webhotelværelse") og angive at der skal bruges en anden
> 500-fejlside.

Hvis man skal ind i IIS og sætte et kryds et sted, kan jeg ikke gøre
det, nej.

Men det efterlader mig vel som jeg forstår det med eneste mulighed, som
er at få adgang til en PC med IIS, og det kan jeg nok, man kender jo
altid én. Gør heller ikke så meget, hvis det bare er for at lægge
fejlsider ind og rode lidt i IIS.



MVH
Rune Jensen

Allan Vebel (06-06-2009)
Kommentar
Fra : Allan Vebel


Dato : 06-06-09 20:05

Rune Jensen skrev:

> Men det efterlader mig vel som jeg forstår det
> med eneste mulighed, som er at få adgang til
> en PC med IIS, og det kan jeg nok, man kender
> jo altid én.

Ja, det har jeg.

--
Allan Vebel
Skal vi mødes?
http://runejensen.dk/webdesign_group_meeting/



Jørn Andersen (06-06-2009)
Kommentar
Fra : Jørn Andersen


Dato : 06-06-09 02:03

On Sat, 06 Jun 2009 00:59:13 +0200, Rune Jensen
<runeofdenmark@gmail.com> wrote:

>Jørn Andersen skrev:
>
>>> Håber, spørgsmålet er forståeligt;)
>>
>> Ved ikke helt ...
>
>Hvis der når man har rettet, sker utilsigtede ting andre steder i scriptet.
>
>Lad os sige, jeg retter øverst i dokumentet, men at det medfører en fejl
>senere, som jeg ikke opdager. En catchall fejlrutine vil opfange denne
>fejl, og med det samme sende en mail (f.eks.).

Hvis jeg fortsår dig rigtigt, så gør du netop det med:

If Err.Number <> 0 Then ...

placeret ret langt nede i scriptet.

>Jeg overvejede en løsning med fjernovervågning af websted. Men siden jeg
>kører med en del brugerafhængigt script (bl.a. IP-tjek), og eftersom der
>jo også kan opstå fejl ved POST,

Til POST og anden input ville jeg ikke bruge den form for
fejlhåndtering, men i stedet input-validering. Input-validering bør
laves, så den tager højde for alle input.

Der er mange ting, der kan gå galt under afvikling af et script, og de
skal ikke alle behandles på samme måde - fx:

Syntax-fejl: bør i alle tilfælde kunne luses ud ved at teste scriptet,
inden det sættes i drift. (fx Option Explicit er meget nyttig).
Input-fejl: Brug validering, der kun tillader lovligt input.
Databasekald: Brug ADO fejlhåndtering
Fil-åbning o.l.: Brug ASP-fejlhåndtering
osv.

Der er altid noget cost-benefit-overvejelse med, når man skal lave
fejlhåndtering (og her tænker jeg ikke ikke kun på programmør-tid).
I princippet kunne man lave fejlcheck for næsten hver eneste kode-linie,
men det ville dels blive meget omfattende, dels give langsom afvikling.

Jeg mener man "bør" lave fejlhåndtering, når der kaldes eksternt, fx
hvis man åbner filer eller kalder databaser - det er ydre ting, som kan
ændre sig, og som scriptet selv ikke har indflydelse på.

Andre ting vil man nogle gange lave fejlcheck på, andre gange ikke:
Vil man fx checke om et billede, der skal bruges i den resulterende HTML
(<img src ...>), eksisterer på serveren? Tjah, det afhænger vel af, hvor
vigtigt billedet er for slut-resultatet. Det giver jo typisk ikke fejl
hverken i ASP eller VBScript, men bare et grimt kryds i browseren.

Vil man checke om Server.CreateObject faktisk danner et objekt
(komponenten kunne være blevet afinstalleret eller scriptet flyttet til
anden server, hvor komponenten ikke er installeret)?
Det vil oftest være en god idé at lave fejlcheck, da det typisk stopper
scriptet, fordi efterfølgende arbejde med objektet ikke er muligt.
Men ofte gør jeg det ikke, fordi fejlen næsten kun opstår, når jeg selv
har været i gang med at ændre noget - og så opdager jeg det typisk med
det samme.

Du vil sikkert komme til andre konklusioner, men overvej, hvad det er du
vil opnå

Good luck!

--
Jørn Andersen,
Brønshøj

Søg
Reklame
Statistik
Spørgsmål : 177547
Tips : 31968
Nyheder : 719565
Indlæg : 6408797
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste