php 类内通知,PHP:忽略特定类中的错误和通知

我的网站是完全自定义的,因此我想知道我编写的代码写得不好.我使用set_exception_handler和set_error_handler来使用自定义类将错误记录到文件中.这包括通知和警告.

在我自己的代码中,这很好,因为我得到的日志很少,而我得到的是我真正想要解决的问题.

但是,我刚刚开始使用simplePie,因为它与PHP4兼容,我收到了大量的通知,主要用于静态调用函数或通过引用错误地传递内容.

对我来说,通过修复simplePie太过分了,如果不是,我首先不会使用它.

有没有办法可以专门忽略某个文件或类生成的错误?以下是我的基本异常处理内容的概述:

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);

}

}

这是simplePie引发的两个错误的示例:

[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

解决方法:

Is there a way that I can specifically ignore errors generated by a certain file or class?

应该很容易!您可以签入自定义错误处理程序

function customErrorHandler($errno, $errstr, $errfile, $errline)

$errfile是否在其中一个simplePie文件中,并且在这种情况下返回true;默默.

标签:php,exception-handling,error-handling,simplepie

来源: https://codeday.me/bug/20190701/1342073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值