Cakephp 3 - как я могу записать все 404 ошибки в отдельный файл - PullRequest
0 голосов
/ 29 ноября 2018

Боты или хакеры бомбардируют наш сайт запросами к несуществующим URL-адресам, таким как /phpmyadmin/ и т. Д., Что делает мои журналы ошибок бесполезными, потому что ошибок, на которые мне нужно обратить внимание, очень мало и они между ними.Я не хочу пропускать их регистрацию с опцией skiplog, потому что мне все равно может понадобиться просмотреть все эти NotFoundException и MissingControllerExceptions в какой-то момент.

1 Ответ

0 голосов
/ 29 ноября 2018

Настройте новую опцию Журнал в файле app.php:

'Log' => [
    '404' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => '404',
        'url' => env('LOG_ERROR_URL', null),
        'scopes' => ['404'],
    ],
    ...

Создайте новый файл здесь: src/Error/AppErrorHandler.php с этим содержимым

namespace App\Error;

use Cake\Error\ErrorHandler;
use Cake\Log\Log;
use Exception;
class AppErrorHandler extends ErrorHandler
{
    /**
     * Handles exception logging
     *
     * @param \Exception $exception Exception instance.
     * @return bool
     */
    protected function _logException(Exception $exception)
    {
        $notFoundExceptions = [
            'Cake\Routing\Exception\MissingControllerException',
            'Cake\Http\Exception\NotFoundException',
            'Cake\Http\Exception\UnauthorizedException',
        ];
        if (in_array(get_class($exception), $notFoundExceptions)) {
            return Log::error($this->_getMessage($exception), '404');
        } else {
            return parent::_logException();
        }
    }
}

Зарегистрируйте этот AppErrorHandler вbootstrap.php файл вашего приложения.Для меня это означало замену регистрации по умолчанию ErrorHandler (new ErrorHandler(Configure::read('Error')))->register(); в строке 109 следующим образом:

(new \App\Error\AppErrorHandler(Configure::read('Error')))->register();
...