Как отправить дополнительные данные в файл laravel.log?

1

Я получаю сообщения об ошибках в файле laravel.log, но описание ошибки не помогает мне найти проблему. Я хочу зарегистрировать дополнительные данные, чтобы быть конкретными, request URL request data, во всех сообщениях об ошибках в файле журнала. Как я могу добавить эти две вещи?

[2015-11-09 13:30:01] production.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /bootstrap/cache/compiled.php:2888
Stack trace:
#0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#1 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#2 /app/Http/Middleware/CheckForMaintenanceMode.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#3 [internal function]: App\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#4 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#5 /bootstrap/cache/compiled.php(12789): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#6 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#7 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#8 /bootstrap/cache/compiled.php(11412): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#11 /bootstrap/cache/compiled.php(12530): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#14 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 /bootstrap/cache/compiled.php(9454): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#16 /bootstrap/cache/compiled.php(2209): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /bootstrap/cache/compiled.php(2192): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#18 /public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#19 {main}  
  • 0
    Вы хотите найти ошибку или записать ошибки?
  • 0
    Запишите URL-адрес и данные запроса о том, когда произошла ошибка. Текущей информации в описании ошибки недостаточно, чтобы найти источник проблемы.
Показать ещё 1 комментарий
Теги:
laravel-5.1

2 ответа

3
Лучший ответ

В /app/Exceptions/Handler.php измените public function report(Exception $e).

// ...
use Request;

// ...
public function report(Exception $e)
{
    if ($this->shouldReport($e)) {
        $request = Request::all();

        $this->log->error("request url: " . Request::url());
        $this->log->error("request data: " . json_encode($request));
    }

    parent::report($e);
}

Наконец, сообщаемая ошибка в laravel.log будет содержать URL-адрес запроса и данные.

[2015-11-12 03:41:14] local.ERROR: request url: http://example.com/path  
[2015-11-12 03:41:14] local.ERROR: request data: {"key":"value"}
[2015-11-12 03:41:14] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in /bootstrap/cache/compiled.php:2888
Stack trace:
#0 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#1 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#2 /app/Http/Middleware/CheckForMaintenanceMode.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#3 [internal function]: App\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#4 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#5 /bootstrap/cache/compiled.php(12789): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#6 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#7 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#8 /bootstrap/cache/compiled.php(11412): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#9 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#11 /bootstrap/cache/compiled.php(12530): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /bootstrap/cache/compiled.php(9464): call_user_func_array(Array, Array)
#14 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 /bootstrap/cache/compiled.php(9454): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#16 /bootstrap/cache/compiled.php(2209): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /bootstrap/cache/compiled.php(2192): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#18 /public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#19 {main}  
  • 0
    Вы нашли корень проблемы? У меня это тоже в производственном приложении.
  • 0
    Проверьте, отправляется ли токен запроса. Если это так, данные сеанса рекламы, как я сделал с данными запроса. Сравните, если токен запроса совпадает с токеном сеанса.
Показать ещё 1 комментарий
0

Понятно, что у вас есть TokenMismatchException

Как я могу это исправить

Вы можете исправить это, отправив _token, созданный Laravel.

Вы можете получить _token по умолчанию в своей форме, если вы используете Form Helper, если вы не можете сделать это вручную, передав его как скрытый

<input type="hidden" name="_token" value="{{ csrf_token() }}">

Заметка :

По умолчанию Laravel будет записывать все ошибки в.log файле внутри storage/logs/laravel-date.log.

Если вы хотите записать эти журналы, вам нужно попытаться поймать и записать вручную внутри db.

  • 0
    Исключение TokenMismatch создается внутри структуры Laravel. У меня уже есть реализация csrf_token (). Выглядит как одна страница, где в какой-то форме не все хорошо. Информация, предоставленная описанием ошибки, не позволяет мне знать, где находится эта форма, страница или строка кода. Знание URL и данных запроса об ошибке поможет мне найти его.
  • 0
    Хорошо, ты не можешь проверить все формы?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню