编程

Laravel 引入 Context Facade

1105 2024-04-05 01:38:00

Laravel 添加了一个新的上下文(Context)服务来定义当前请求的上下文数据。上下文数据包含在该请求的所有日志条目中,队列的任务也将保留相同的数据。使用上下文数据可以方便地追溯给定请求和应用中任何分布式流的代码执行情况:

// In a middleware...
Context::add('hostname', gethostname());
Context::add('trace_id', (string) Str::uuid());
 
// In a controller...
 
Log::info('Retrieving commit messages for repository [{repository}].', [
    'repository' => $repo,
]);
 
Http::get('https://github.com/...');
 
/*
Log entry example:
 
[2024-01-19 04:20:06] production.INFO: Retrieving commit messages for repository [laravel/framework]. {"repository":"laravel/framework"} {"hostname":"prod-web-1","trace_id":"a158c456-d277-4214-badd-0f4c8e84df79"}
*/

上下文数据也支持像堆栈这样的概念,你可以将数据推入到同一个上下文中,有效地追加数据:

Event::listen(function (JobQueued $event) {
    Context::push('queued_job_history', "Job queued: {$event->job->displayName()}");
});
 
Context::get('queued_job_history');
 
// [
//     "Job queued: App\Jobs\MyFirstJob",
//     "Job queued: App\Jobs\MySecondJob",
//     "Job queued: App\Jobs\MyThirdJob",
// ]

如果你想详细了解该特性,请查阅 PR 中的描述。