2014-05-11 15 views
10

अंदर कॉलिंग register_shutdown_function मैं register_shutdown_function और set_error_handler कार्यों का उपयोग कर त्रुटियों लॉग इन करने की कोशिश कर रहा हूँ। मैं इसके लिए निम्न श्रेणी फ़ाइल का उपयोग कर रहा हूं। हालांकि यह काम नहीं करता है।एक वर्ग

<?php 
//Logs.php 
class MyLogs 
{ 

    public function __construct() 
    { 
     register_shutdown_function(array($this, 'shutdownHandler')); 
     set_error_handler(array($this, 'errorHandler')); 
    } 

    private function errorHandler($error_level, $error_message, $error_file, $error_line, $error_context) 
    { 
     $error = "lvl: " . $error_level . " | msg:" . $error_message . " | file:" . $error_file . " | ln:" . $error_line; 

     switch ($error_level) { 
      case E_ERROR: 
      case E_CORE_ERROR: 
      case E_COMPILE_ERROR: 
      case E_PARSE: 
      case E_USER_ERROR: 
       $this->logMe($error, "fatal"); 
       break; 
      case E_USER_ERROR: 
      case E_RECOVERABLE_ERROR: 
       $this->logMe($error, "error"); 
       break; 
      case E_WARNING: 
      case E_CORE_WARNING: 
      case E_COMPILE_WARNING: 
      case E_USER_WARNING: 
       $this->logMe($error, "warn"); 
       break; 
      case E_NOTICE: 
      case E_USER_NOTICE: 
       $this->logMe($error, "info"); 
       break; 
      case E_STRICT: 
       $this->logMe($error, "debug"); 
       break; 
      default: 
       $this->logMe($error, "warn"); 
     } 
    } 

    private function shutdownHandler() //will be called when php script ends. 
    { 
     $lasterror = error_get_last(); 

     echo "Level: " . $lasterror; 
     switch ($lasterror['type']) 
     { 
      case E_ERROR: 
      case E_CORE_ERROR: 
      case E_COMPILE_ERROR: 
      case E_USER_ERROR: 
      case E_RECOVERABLE_ERROR: 
      case E_CORE_WARNING: 
      case E_COMPILE_WARNING: 
      case E_PARSE: 
       $error = "[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line']; 
       $this->logMe($error, "fatal"); 
     } 
    } 

    private function logMe($error, $errlvl) 
    { 
     echo 'Error No: ' . $error . ' <BR> Error Level: ' .$errlvl; 
    } 
} 

..

<?php 
// Index.php 
include "Logs.php" 

new MyLogs(); 
echo $b; //this should generate a notice error since $b does not exits... 

हालांकि, अगर मैं एक वर्ग लेकिन सिर्फ कार्यों का उपयोग नहीं करते हैं, वे काम ठीक ... किसी कृपया मुझे बताओ क्या गलत?

धन्यवाद

+2

नीचे @sectus उत्तर एक काफी सरल उत्तर की तरह लगता है। यदि यह काम करता है तो आपको इसे स्वीकार किए गए उत्तर के रूप में चुनना चाहिए? –

उत्तर

8

आपको अपनी त्रुटि सेटिंग्स ठीक से सेट करनी चाहिए। उदाहरण

ini_set('error_reporting', -1); 
ini_set('display_errors', 1); 

इस के बाद के लिए आप अपने त्रुटि पाते हैं: अपने shutdownHandler और errorHandler सार्वजनिक रहना होगा।

संबंधित मुद्दे