如何邮寄所有例外?

时间:2016-06-20 17:54:44

标签: cakephp cakephp-3.0

我想邮寄CakePHP 3中的所有错误或异常。 哪一个解决方案是正确的?

  1. 编写新的日志引擎
  2. 编写新的错误处理程序

1 个答案:

答案 0 :(得分:0)

我编写了自定义错误处理程序并注册它。

// In config/bootstrap.php
namespace App\Error;

use Cake\Error\ErrorHandler;
use Cake\Mailer\Email;

/**
 * AppError
 *
 * @package App\Error
 */
class AppError extends ErrorHandler
{
    /**
     * {@inheritdoc}
     */
    protected function _displayException($exception)
    {
        parent::_displayException($exception);

        try {
            $email = new Email('default');
            $email->to('bug@example.com')
                ->emailFormat(Email::MESSAGE_HTML)
                ->subject('Bug !!!')
                ->template('bug')
                ->set(['exception' => $exception])
                ->send();
        } catch (Exception $e) {
            // Disable trace for internal errors.
            $this->_options['trace'] = false;
            $message = sprintf(
                "[%s] %s\n%s", // Keeping same message format
                get_class($e),
                $e->getMessage(),
                $e->getTraceAsString()
            );
            trigger_error($message, E_USER_ERROR);
        }
    }
}

创建“bug”模板:

// In src/Template/Email/html/bug.ctp
<h1><?= $exception->getMessage() ?></h1>

<p>
    <?= nl2br($exception->getTraceAsString()) ?>
</p>