laravel telescope如何记录其它插件的http请求

laravel telescope如何记录其它插件的http请求

比如我在项目中安装了overtrue/wechat包,包中封装了微信的各种请求方法,如何把这些请求记录记录到telescope中,就像直接使用 Laravel自带的Http类一样.

使用laravel自带Http请求

    public function access_token()
    {
        $cache_name = "mini_access_token";
        $access_token = Cache::get($cache_name);
        if (!$access_token) {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->secret}";
            $res = Http::get($url)->json();
            $access_token = $res["access_token"];
            Cache::put("mini_access_token", $access_token, $res["expires_in"]);
        }
        return $access_token;
    }

请求会自动记录到telescope HTTP Client 中,如果项目有其它第三方包封装了http请求,telescope无法记录到请求,如何实现在telescope中记录所有第三方包的请求记录
laravel telescope如何记录其它插件的http请求

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7
陈先生

如果你只想在代码中记录 HTTP 请求,你可以使用 Laravel 的事件系统。当应用程序发送 HTTP 请求时,你可以触发一个事件,将请求发送到一个事件监听器中,然后在监听器中记录请求的详细信息。

首先,你需要在应用程序中定义一个事件。你可以在 app/Providers/EventServiceProvider.php 文件中注册该事件:

protected $listen = [
    'App\Events\HttpRequestSent' => [
        'App\Listeners\LogHttpRequest',
    ],
];

然后,你需要定义 App\Events\HttpRequestSent 事件类,该类应该包含发送的请求的详细信息。你可以在事件类中添加一个 $request 属性来存储请求:

namespace App\Events;

use Illuminate\Http\Request;
use Illuminate\Foundation\Events\Dispatchable;

class HttpRequestSent
{
    use Dispatchable;

    public $request;

    public function __construct(Request $request)
    {
        $this->request = $request;
    }
}

接下来,你需要定义一个事件监听器,它将接收 HttpRequestSent 事件,并记录请求的详细信息。你可以在 app/Listeners/LogHttpRequest.php 文件中定义该监听器:

namespace App\Listeners;

use App\Events\HttpRequestSent;
use Illuminate\Support\Facades\Log;

class LogHttpRequest
{
    public function handle(HttpRequestSent $event)
    {
        $request = $event->request;

        // 记录请求的详细信息
        Log::info('HTTP Request Sent', [
            'url' => $request->fullUrl(),
            'method' => $request->method(),
            'headers' => $request->headers->all(),
            'body' => $request->all(),
        ]);
    }
}

最后,当你想要记录 HTTP 请求时,你可以在你的代码中触发 HttpRequestSent 事件:

use App\Events\HttpRequestSent;
use Illuminate\Http\Client\Response;

$response = Http::get('https://example.com/api/users');
event(new HttpRequestSent($response->toPsrRequest()));

这将触发 HttpRequestSent 事件,并将请求对象发送到 LogHttpRequest 监听器中。在监听器中,请求的详细信息将被记录到日志文件中。

9个月前 评论
Cooper 9个月前
陈先生 (作者) 9个月前
Cooper 9个月前
陈先生 (作者) 9个月前

这个可能是你需要的: telescope-guzzle-watcher
或者参考这个文章:telescope-log-guzzle-outgoing-requests

9个月前 评论

其实,正常来说,不管是用什么方式发起的请求,你都应该记录下日志,而不是依赖 telescope 吧,,,

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!