Sitem gibi ben kötü yazılmış bir kod varsa bilmek istiyorum, tamamen özel olduğunu. Ben bir dosyaya günlük hataları için özel sınıflar kullanmak set_exception_handler ve set_error_handler kullanın. Bu bildirimler ve uyarılar içermektedir.
Ben aslında düzeltmek istiyorum şeyler olsun yoksa çok az günlükleri ve bu olsun benim kendi kodu içinde, bu gayet iyi.
Ancak, ben sadece SimplePie kullanarak başladım ve PHP4 uyumlu çünkü ben öncelikle statik işlevleri arayarak veya yanlış referans şeyleri geçirerek gibi şeyler için, bildirimler ton olsun.
Beni geçmesi ve SimplePie düzeltmek, o olmasaydı ben ilk etapta bunu kullanarak olmaz için çok çok fazla.
Ben özellikle belli bir dosya veya sınıf tarafından oluşturulan hataları görmezden bir yolu var mı? İşte benim çok temel istisna işleme ne gibi görünüyor bir bakış:
set_exception_handler("CustomExceptionHandler"); set_error_handler("customErrorHandler"); /** * CustomExceptionHandler() * * This is used if an exception is thrown that isn't caught. * * @param object $e The exception as an object */ function CustomExceptionHandler(Exception $e) { exitToError($e->getMessage()); } /** * customErrorHandler() * * This is called for any errors no matter what their level. */ function customErrorHandler($errno, $errstr, $errfile, $errline) { if(in_array($errno, array(E_USER_ERROR, E_RECOVERABLE_ERROR))) { throw new CustomErrorException($errstr, 0, $errno, $errfile, $errline); } else { CustomException::logError($errstr, $errno, $errfile, $errline); } return FALSE; } /** * class CustomErrorException * * Used by custom_error_handler() to convert all fatal * errors to exceptions. * * @see custom_error_handler() * @see http://www.php.net/manual/en/class.errorexception.php */ class CustomErrorException extends CustomException { /** * $severity * * The severity level of the exception * * @access protected * @var int */ protected $severity; /** * __construct() * * Constructs the new exception * * @access public * @param string $message The Exception message * @param int $code The Exception code * @param int $severity The severity level of the exception * @param string $filename The filename where the exception was thrown * @param int $lineno The line number where the exception was thrown */ public function __construct($message, $code = null, $severity = E_ERROR, $filename = null, $lineno= null) { $this->message = $message; $this->code = $code; $this->severity = (int)$severity; $this->file = $filename; $this->line = $lineno; self::logError($this->message,$this->code,$this->file,$this->line,$this->getTraceAsString()); } } /** * class CustomException * * Overwrites Exception to give us more control on how * exceptions are handled and logged. * * @see http://www.php.net/manual/en/language.exceptions.extending.php */ class CustomException extends Exception { /** * __construct * * We call the parent contruct as we still want it to do all its magic. We just want * overwrite this method so that we can log the error exactly how we want. */ public function __construct($message, $code = 0, Exception $previous = NULL) { parent::__construct($message, $code); self::logError($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString()); } /** * __toString() * * We overwrite this function so that we can use our stringBuilder function. */ public function __toString() { return self::stringBuilder($this->getMessage(),$this->getCode(),$this->getFile(),$this->getLine(),$this->getTraceAsString()); } /** * stringBuilder() * * We use this method so that we have a standard method of building error * strings that anything can tap into. * * @access public * @param string $message the exception message * @param int $code the code assigned to this exception * @param string $file the file where the exception occurred * @param int $line the line where the exception occurred * @param string $trace backtrace */ public function stringBuilder($message, $code, $file, $line, $trace='') { //return "[".date("d-M-Y H:i:s")."] ".$this->getMessage()." in ".$this->getFile().":".$this->getLine()."\nStack trace:\n".$this->getTraceAsString()."\n"; return "[".date("d-M-Y H:i:s")."] ".$message." in ".$file.":".$line."\n"; } /** * logError() * * We use a method so that we have a standard way of saving errors * to a log. * * We use XML because it's easy to parse. * * @access public * @param string $message the exception message * @param int $code the code assigned to this exception * @param string $file the file where the exception occurred * @param int $line the line where the exception occurred * @param string $trace backtrace * @todo We could improve it to write to the xml file using DomDocument * as laid out here http://www.xml-training-guide.com/append-delete-data-from-xml-using-php.html */ public function logError($message, $code, $file, $line, $trace='') { //Save it to a standard text file to guarentee saving the error file_put_contents(ROOT_URL.ERROR_LOG_TXT,self::stringBuilder($message, $code, $file, $line, $trace),FILE_APPEND); } }
ve burada SimplePie yukarı atar hatalardan iki örneğidir:
[01-Aug-2010 00:50:33] Assigning the return value of new by reference is deprecated in ***\SimplePie.php:738 [01-Aug-2010 00:50:34] Non-static method SimplePie_Misc::parse_date() should not be called statically in ***\SimplePie.php:60