是否有可能记录堆栈跟踪的PHP警告?或者捕获一个警告和error_log()吗?
在我的错误日志中有一些代码会导致警告,但是在不知道堆栈跟踪的情况下,无法知道导致这些警告的原因。
有一个使用set_error_handler()
和ErrorException
这样做的例子:
https://php.net/manual/en/class.errorexception.php
您只需要在处理函数内部实现自定义日志记录功能。
更新:
请注意,这也适用于警告和许多其他错误类型。有关完全兼容性,请参阅set_error_handler()
手册:
只需在脚本开头抛出:
set_error_handler(function($severity, $message, $file, $line) {
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $file, $line);
}
});
删除要记录所有内容的if
,即使它已被抑制。
我相信xdebug将会记录,如果你在php.ini文件中启用了它,但它有堆栈跟踪(有一些奖励功能,如显示局部变量)。但不建议用于生产环境。