【发布时间】:2016-05-21 04:59:57
【问题描述】:
我想在每个错误日志中附加用户在错误发生之前请求的页面的 url。日志已经告诉我错误发生的位置,但知道 url 对我很有价值。
我看到有一个 Handler.php 文件,但是如何在其中附加 url?
【问题讨论】:
标签: laravel logging laravel-5.1 error-logging error-log
我想在每个错误日志中附加用户在错误发生之前请求的页面的 url。日志已经告诉我错误发生的位置,但知道 url 对我很有价值。
我看到有一个 Handler.php 文件,但是如何在其中附加 url?
【问题讨论】:
标签: laravel logging laravel-5.1 error-logging error-log
这很简单,在你的 app/Exceptions/Handler.php 上面添加这两个导入:
use Request;
use Log;
然后在您的报告方法中添加:
public function report(Exception $e) {
Log::info($e->getMessage(), [
'url' => Request::url(),
'input' => Request::all()
]);
return parent::report($e);
}
现在,每当您遇到异常时,都会记录 当前 url,并且还会记录请求参数 GET 或 POST:
[2016-02-10 19:25:13] local.INFO: Error Processing Request {"url":"http://localhost:8002/list","input":{"name":"fabio","surname":"antunes"}}
【讨论】:
Request::all() 数组中取消设置 password 和 password_confirmation。重大安全风险!
更好的方法:
在 App\Exceptions\Handler 中扩展 Laravel 的基础 context() 函数:
use Throwable;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Request;
/**
* Get the default context variables for logging.
*
* @return array
*/
protected function context()
{
try {
return array_filter([
'url' => Request::fullUrl(),
'input' => Request::except(['password', 'password_confirmation']),
'userId' => Auth::id(),
'email' => Auth::user() ? Auth::user()->email : null,
]);
} catch (Throwable $e) {
return [];
}
}
【讨论】:
您可以在 App\Exceptions\Handler 中扩展 context() 方法。在此实现中,您保留原始方法并仅扩展数据数组。
protected function context()
{
try {
$context = array_filter([
'url' => Request::url()
]);
} catch (Throwable $e) {
$context = [];
}
return array_merge($context, parent::context());
}
【讨论】: