将唯一标识符附加到Laravel请求

7

是否有一个适用于Laravel的包,可以为每个请求添加唯一标识符,以便在日志中使用?

例如:我想知道请求ID as12121-1212s-121 是否有错误,我可以查看日志以获取任何错误信息。

该请求ID将在UI中显示,当从客户端获取错误的截图时,我可以进行调试。


你想给每个请求都附加一个唯一的ID吗?还是只有错误信息? - Samsquanch
对于每个请求,都会生成一个 ID,并在日志等记录中引用该 ID。我希望在 Laravel 中实现此功能。另一种解决方案是在我的 Web 服务器前面放置代理,添加类似 X-Unique-ID 的标头。 - user237329
目前我找到了这个包,可以修改中间件的请求:https://github.com/lara-middleware/request-id/blob/master/src/LaraMiddleware/RequestId/RequestId.php 然后我可以使用类似于 Log::getMonolog()->pushProcessor 的东西。 - user237329
3个回答

3
您可以使用 $request->fingerprint()。
这将从您的请求中打印出一个唯一的ID,您可以用它来跟踪它。
public function fingerprint()
{
    if (! $route = $this->route()) {
        throw new RuntimeException('Unable to generate fingerprint. Route unavailable.');
    }

    return sha1(implode('|', array_merge(
        $route->methods(),
        [$route->getDomain(), $route->uri(), $this->ip()]
    )));
}

2
为请求/路由/IP地址获取唯一指纹。 - Gabriel Fernandez
如果您使用相同的uri、相同的方法等命中请求,它将不是“per request”独有的,而会返回相同的值。没有时间或会话成分。 - Chris

0

0
如果您需要每个请求一个唯一的ID,您可以通过全局中间件为请求分配一个UUID。
例如:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class RequestUniqueId
{
    public function handle(Request $request, Closure $next)
    {
        $uuid = (string) Str::uuid();
        $request->headers->set('X-Request-ID', $uuid);

        return $next($request);
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接