Rollbar 的 Yii2 自定义错误处理程序 - 不应在浏览器中显示错误
Yii2 Custom Error Handler for Rollbar - Errors should not be displayed in browser
我需要通过扩展 rollbar 错误处理程序来创建一个自定义错误处理程序,它应该始终处理致命错误,但仅当我们处于调试模式时才处理通知错误。在生产模式下,所有通知错误不应显示在浏览器中,而应记录在 rollbar 中并得到通知。谁能就如何处理此错误提出建议?
我刚开始扩展 Yii2 基本错误处理程序,
<?php
namespace common\components;
class ErrorHandler extends \yii\web\ErrorHandler
{
public function register()
{
ini_set('display_errors', false);
set_exception_handler([$this, 'handleException']);
register_shutdown_function([$this, 'handleFatalError']);
}
}
使用上面的代码,我可以从浏览器中隐藏通知错误并登录 php 错误日志。现在问题是我需要登录 rollbar 并照常收到通知。
我用下面的代码解决了。
/**
* Handles PHP execution errors such as warnings and notices.
*
* This method is used as a PHP error handler. It will simply raise an [[ErrorException]].
*
* @param int $code the level of the error raised.
* @param string $message the error message.
* @param string $file the filename that the error was raised in.
* @param int $line the line number the error was raised at.
* @return bool whether the normal error handler continues.
*
* @throws ErrorException
*/
public function handleError($code, $message, $file, $line)
{
if (error_reporting() & $code) {
$exception = new \yii\base\ErrorException($message, $code, $code, $file, $line);
if (YII_ENV_PROD) {
$this->logException($exception);
} else {
throw $exception;
}
}
return false;
}
我需要通过扩展 rollbar 错误处理程序来创建一个自定义错误处理程序,它应该始终处理致命错误,但仅当我们处于调试模式时才处理通知错误。在生产模式下,所有通知错误不应显示在浏览器中,而应记录在 rollbar 中并得到通知。谁能就如何处理此错误提出建议?
我刚开始扩展 Yii2 基本错误处理程序,
<?php
namespace common\components;
class ErrorHandler extends \yii\web\ErrorHandler
{
public function register()
{
ini_set('display_errors', false);
set_exception_handler([$this, 'handleException']);
register_shutdown_function([$this, 'handleFatalError']);
}
}
使用上面的代码,我可以从浏览器中隐藏通知错误并登录 php 错误日志。现在问题是我需要登录 rollbar 并照常收到通知。
我用下面的代码解决了。
/**
* Handles PHP execution errors such as warnings and notices.
*
* This method is used as a PHP error handler. It will simply raise an [[ErrorException]].
*
* @param int $code the level of the error raised.
* @param string $message the error message.
* @param string $file the filename that the error was raised in.
* @param int $line the line number the error was raised at.
* @return bool whether the normal error handler continues.
*
* @throws ErrorException
*/
public function handleError($code, $message, $file, $line)
{
if (error_reporting() & $code) {
$exception = new \yii\base\ErrorException($message, $code, $code, $file, $line);
if (YII_ENV_PROD) {
$this->logException($exception);
} else {
throw $exception;
}
}
return false;
}