Avatar billede k_jr Nybegynder
24. december 2008 - 00:55 Der er 3 kommentarer

Log af Fatal Error?

Som et led i et lille fritidsprojekt, har jeg forsøgt at lave min egen errorhandler class baseret på noget ældre kode fra et skoleprojekt.

Det fungerer fint med alm notices, men jeg kan ikke fange fatal errors eller logge dem til en separat logfil.

Fx:

echo $asd; <- notice fanges og logges korrekt.

echo foo::bar(); <- fatal error fanges IKKE og logges kun i apaches errorlog.


------------------------------------------------------------

    $error = new errorHandler();
   
    class errorHandler {
        function __construct() {
            set_error_handler(array($this, 'handle'));
        }
       
        function handle($type, $string, $file, $line, $vars) {
           
            if (error_reporting() == 0) {
                // if error has been supressed with an @
            }
            else if (error_reporting() & $type) {
                if (Config::get('system.debug') === false) {
                    // dev.
                    $this->_outputDebug($type, $string, $file, $line, $vars);
                }
                else {
                    // prod.
                    $this->_log($type, $string, $file, $line, $vars);
                    $this->_die('An error occured.');
                }
            }
        }

------------------------------------------------------------
Avatar billede coderdk Praktikant
24. december 2008 - 01:15 #1
Fra php.net: "The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called."
Avatar billede k_jr Nybegynder
24. december 2008 - 01:18 #2
Har lige gennemgået siden og kommentarerne igen.. Ser ud til du har ret.

Det lyder bare lidt mærkeligt det ikke skulle være muligt.. eller er det bare mig....?
Avatar billede cronaldo Nybegynder
24. december 2008 - 11:42 #3
k_jr: Nu kan jeg ikke lige umiddelbart se hvad du skal bruge det til, men KUNNE du ikke gøre sådan, at hver gang der er sket en fejl, der ikke kan logges, logger du i stedet følgende:

"Der er sket en fatal_error på siden <i>".$page['1']."</i>", linje nr ".$_udskriv_linje_nr."!";

eller sådan noget lign. :) ? Så kan du altid gå ind i dit system og se hvilken side, det er sket på :)
Hvis det er et brugersystem kunne du fx logge hvilken bruger, der har fået fejlen - og så kan du se om det ofte er samme bruger der fremtvinger fejlen (med henblik på evt. ban? Det må jo være et tegn på han prøver på noget snavs :) ..)
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