我想在服务提供者中生成唯一的请求ID,请问这么写有问题吗?
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
define('REQUIRED_ID', (string) \Illuminate\Support\Str::uuid());
}
}
没什么问题吧,有跨应用的需要吗,有就做一下“承上启下”
如果用octane的話 就有問題
能有什么问题?
这个不应该是前端请求的时候放在请求头里面吗
这个写日志官方不是给了你很好的示例吗 日志《Laravel 10 中文文档》
和楼主不同,我们除了定时脚本都是常驻内存的,所以单独进行了封装,并通过监听器和基类方法重写的方式将数据存到各个地方,以便于跟踪。
以上代码会根据 handle() 方法的调用将跟踪上下文混合到日志数据中去。
为了解决诸如请求出发队列这种问题,我们还将重写了
Illuminate\Queue\SerializesModels
的 __serialize() 方法 和 __unserialize() 方法,用来在队列中额外传递跟踪数据。其实就是trace id的概念;不是强依赖唯一性,偶尔重复问题应该也不大;uuid 、雪花算法、 php自带的 uniqid; 我觉得都没问题;
不过在service provider里设置 trace id的地方是有待争议的;准确的来讲 trace id是跟随 request 产生的,你应该写在 index.php 里设置成request的属性
或者写一个 event listener, 监听request事件;在监听者里写上述代码;
只要不常驻内存就没毛病
如果是在我前几年经常加班的时候,这么写我是认为毫无问题的,因为代码能跑就好了。
现在我不会这样写了,define是定义常量,在计算机科学中常量意味着是不会改变的量。例如周二的数字形态是2 ,我会这样写。
我觉得不妥,是因为这是编码的基础。这里不是说在laravel中在php中这样使用不妥,而是编码不应该这样,尽管基于fpm架构下可以这样写。
但如果用常量来表示变量的写法让你获得了某些收益,也不是未尝不可。
应该在中间件中做,不应该在服务提供者中做,服务提供者是用来注册服务的