错误登录laravel 5,其中url发生错误

seb*_*ola 9 logging error-logging error-log laravel laravel-5.1

我想附加到每个错误日志,即错误发生前用户请求的页面的URL.日志已经告诉我错误发生的地方,但是对我来说知道网址是有价值的.

我看到有一个Handler.php文件,但我怎么能在那里附加网址?

Fab*_*nes 18

这很简单,在你的app/Exceptions/Handler.php上添加这两个导入:

use Request;
use Log;
Run Code Online (Sandbox Code Playgroud)

然后在您的报告方法上添加:

public function report(Exception $e) {
    Log::info($e->getMessage(), [
        'url' => Request::url(),
        'input' => Request::all()
    ]);
    return parent::report($e);
}
Run Code Online (Sandbox Code Playgroud)

现在,只要您收到异常,就会记录当前的url,并且还会记录GETPOST请求参数:

[2016-02-10 19:25:13] local.INFO: Error Processing Request {"url":"http://localhost:8002/list","input":{"name":"fabio","surname":"antunes"}} 
Run Code Online (Sandbox Code Playgroud)

  • 我找到了困难的方法:在将其写入日志之前,一定要从`Request :: all()`数组中取消设置`password`和`password_confirmation`.主要安全隐患! (7认同)

fsa*_*ari 11

更好的方法是这样做:

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 [];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个更好的答案。 (3认同)