我该如何将以下错误记录到文本文件或数据库中?
致命错误:调用未定义的方法 PROJECTS::ssss()
我该如何将以下错误记录到文本文件或数据库中?
致命错误:调用未定义的方法 PROJECTS::ssss()
有一种方法可以处理您的任务,实际上您可以在致命错误上设置自定义错误处理程序。
您可以按照以下方式执行:
有一种应对任务并能够在发生致命错误时设置自定义错误处理程序的方法。
您可以这样做:
ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
$error = error_get_last();
// Do whatever you want with this error. For example:
YourDBApplicationLayer::writeFatal($error);
}
使用自定义错误处理程序无法处理致命错误。
最好的解决方案是在php.ini中启用错误日志记录(例如,到syslog),然后使用类似logcheck / logsentry的工具定期接收有关异常syslog条目的电子邮件。
除了syslog之外,PHP还可以将错误记录到文件中-只需查看php.ini的错误记录选项即可。
log_errors = On
error_log = syslog
error_log = /path/to/some/folder/phperrors.log
显然,你只想使用其中一个error_log
行。
在 PHP 7 中,现在可以捕获致命错误:
try {
ggggg(); // <---- make a fatal error
} catch(Throwable $e) {
var_dump($e);
}
Throwable
类,它最终统一了错误和异常,但要实现它,您必须将错误/异常对象强制转换为 Throwable:try { ggggg(); } catch(\Throwable $e) { var_dump($e); }
- yodabar你可以将所有的基础类都归属于一个使用方法重载的超级类:
class Base
{
public function __call($name)
{
MyLog::logError(...);
trigger_error("Function ".get_class($this)."::$name doesn't exist",
E_USER_ERROR);
}
}
试图调用从Base
派生的类的不存在方法最终将由Base::__call()
处理。对于静态方法,相应地,有__callStatic()
(自PHP 5.3起)。
类似这样:
if(!method_exists($obj, 'method')){
$db->log('What you want to log'); //log in your DB
error_log('message');//Write to php's error log
}
<?php function cleanup(){ print_r(error_get_last()); }
register_shutdown_function("cleanup");asdfasdf();
- Sebastián Grignoli