Avatar billede Slettet bruger
01. maj 2006 - 12:06 Der er 13 kommentarer

Hente error beskeden ud, og lav en log

Hej eksperter.
Hvordan laver jeg en log, som indeholder alle de fejl der sker på min side?

Jeg har kigget på funktionerne error_log(); og fwrite();

Jeg har fået dem begge til at virke, men det der er mit største problem er at jeg ikke kan finde ud af at hive selve fejl besked ud, som den giver på siden.
Har prøvet trigger_error(); da jeg trorede det var den.

Hvordan får jeg error beskeden ud, som PHP giver?

Håber I kan hjælpe mig.
Avatar billede Slettet bruger
01. maj 2006 - 12:08 #1
Jeg har forresten også prøvet:
error_log("Fejl ".error_reporting(E_ALL)."\n", 3, "C:\wamp\www\log.log");
Men der skriver den bare "Fejl 2039"...
Avatar billede tjanum Nybegynder
01. maj 2006 - 15:41 #2
Du er nok nødt til at lave din egen error_handler. Du kan se på php.net hvordan man gør, og ellers findes der et hav af tutorials på nettet omkring det.

error_reporting(E_ALL) fortæller bare at du vil have alle de warning, errors, notices osv. PHP overhovedet kan give (eksl. strict som kom til i PHP5). Den returnerer ingen fejltekster - men åbenbart koden, der hører til E_ALL.
Avatar billede steven_ Nybegynder
01. maj 2006 - 16:38 #3
Avatar billede Slettet bruger
01. maj 2006 - 19:08 #4
Ja kender godt error_reporting(E_ALL);
Jeg har lige læst dette indlæg: ftp.cvut.cz/manual/en/language.exceptions.php#65203" target="_blank">http://php.ftp.cvut.cz/manual/en/language.exceptions.php#65203
Avatar billede tjanum Nybegynder
01. maj 2006 - 23:53 #5
Jep - jeg er ikke helt sikker på, jeg er med på, hvad du mener med, at du har læst om exceptions. Hvis det drejer sig om, at du ikke kan fange fatale fejl, mener du så ikke, at du kan bruge error-logning til noget? Ellers har jeg lige bikset en lille error_handler sammen, som du måske vil kunne bruge:

<?php
error_reporting(E_ALL);
set_error_handler('error_handler');

function error_handler($error_code, $error_msg , $error_file ,$error_line , $vars) {
    setlocale(LC_ALL,'da_DK');
    $log_text = "\nDato: \t".date("l \d\e\\n j. F Y \k\l. H:i:s")
                ."\nFejlkode: \t[".$error_code."] "
                ."\nFejltekst: \t".$error_msg
                ."\nFil: \t".$error_file
                ."\nLinje: \t".$error_line."\n";
    error_log($log_text,3,"C:\wamp\www\log.log");
}
?>

Som jeg læser dit spørgsmål, er det ca. det, du vil(?). Det kan godt være, at dit webhotel ikke bruger samme streng til at sætte locale (i setlocale()).

Det er generelt lidt mere elegant at bruge try-catch til at fange exceptions, men personligt synes jeg, det er en smule omstændigt og har aldrig rigtig selv brugt det i PHP.
Avatar billede Slettet bruger
02. maj 2006 - 08:11 #6
Jo det et er ca. det jeg vil, men kan man virkelig ikke fange fatal error's?
Og hvorfor ikke, fordi det kan min Wamp da.
Avatar billede tjanum Nybegynder
02. maj 2006 - 13:53 #7
Jeg er heller ikke helt sikker på, hvad du mener med, at din Wamp kan det :-)...men det er også lige meget :-)

Man kan godt fange fatale fejl (eller de fleste i hvert fald). Man skal blot bruge output-buffering så, og så skal du ændre lidt på din Apache server eller lave ændringerne med .htaccess. Jeg vil næsten tro, at jeg godt kan finde en artikel om det, men jeg kan desværre ikke lige ryste et kodeeksempel ud af ærmet, for jeg har kun prøvet det en enkelt gang før.
Avatar billede Slettet bruger
02. maj 2006 - 18:08 #8
Okay, ja det ville være kanon lækkert hvis du gad at finde en artikel om det.
Avatar billede tjanum Nybegynder
02. maj 2006 - 18:24 #9
No problem - jeg har læst en del om det, men som sagt kun forsøgt mig med det en enkelt gang, så hvis du ikke kan få det til at virke, som du gerne vil, kan jeg ikke love, at jeg kan hjælpe med det.

http://www.zend.com/zend/spotlight/code-gallery-wade9.php?article=code-gallery-wade9&kind=sl&id=10080&open=1&anc=0&view=1

Der står bl.a.:
"In order to catch the fatal and parse errors, we need to turn output buffering on for our PHP installation. We then send all the buffered output to a custom output handler and .......", efterfulgt af en vejledning til, hvordan du laver de nødvendige ændringer i konfigurationen.

Læs evt. også den alternative løsning, der er beskrevet nederes i artiklen. Den benytter sig af et cron-job, og ser for mig ud til at være en fin løsning (hvis skidtet kører på en Windows, kan man sikkert bruge Windows Scheduler i stedet for cron).
Avatar billede Slettet bruger
10. august 2006 - 08:57 #10
Tak for hjælpen begge 2, men synes det må være tjanum's points.
Avatar billede Slettet bruger
21. december 2006 - 23:32 #11
Læg et svar tak tjanum, så jeg kan få lukket dette spm.
Avatar billede tjanum Nybegynder
22. december 2006 - 14:57 #12
Undskylder - havde overset den.

God jul.
Avatar billede Slettet bruger
22. december 2006 - 20:05 #13
Jo tak og i lige måde.
(Du skal da ikke undskylde, jeg er selv lang tid om at opdage dette spm ikke var lukket)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester