An elegant debug assistant for the hyperf framework.
- request
- exception
- sql
- grpc server/client
- redis
- log
- command
- event
- guzzle
- cache
- rpc server/client
composer require friendsofhyperf/telescope:~3.1.0
php bin/hyperf.php vendor:publish friendsofhyperf/telescope
php bin/hyperf.php migrate
<?php
// config/autoload/listeners.php
return [
FriendsOfHyperf\Telescope\Listener\RequestHandledListener::class,
];
<?php
// config/autoload/middlewares.php
return [
'grpc' => [
FriendsOfHyperf\Telescope\Middleware\TelescopeMiddleware::class,
],
];
TelescopeMiddleware or RequestHandledListener, you can choose one of them.
# telescope
TELESCOPE_DB_CONNECTION=default
TELESCOPE_ENABLE_REQUEST=true
TELESCOPE_ENABLE_COMMAND=true
TELESCOPE_ENABLE_GRPC=true
TELESCOPE_ENABLE_LOG=true
TELESCOPE_ENABLE_REDIS=true
TELESCOPE_ENABLE_EVENT=true
TELESCOPE_ENABLE_EXCEPTION=true
TELESCOPE_ENABLE_JOB=true
TELESCOPE_ENABLE_DB=true
TELESCOPE_ENABLE_GUZZLE=true
TELESCOPE_ENABLE_CACHE=true
TELESCOPE_ENABLE_RPC=true
TELESCOPE_SERVER_ENABLE=true
http://127.0.0.1:9509/telescope/requests
you may want to attach your own custom tags to entries. To accomplish this, you may use the Telescope::tag
method.
You may only want to record entries under certain special conditions. To achieve this, you may use the Telescope::filter
method.
Example
use FriendsOfHyperf\Telescope\Telescope;
use Hyperf\Event\Contract\ListenerInterface;
use Hyperf\Framework\Event\BootApplication;
use FriendsOfHyperf\Telescope\IncomingEntry;
class TelescopeInitListener implements ListenerInterface
{
public function listen(): array
{
return [
BootApplication::class,
];
}
public function process(object $event): void
{
// attach your own custom tags
Telescope::tag(function (IncomingEntry $entry) {
if ($entry->type === 'request') {
return [
'status:' . $entry->content['response_status'],
'uri:'. $entry->content['uri'],
];
}
});
// filter entry
Telescope::filter(function (IncomingEntry $entry): bool {
if ($entry->type === 'request'){
if ($entry->content['uri'] == 'xxxx') {
return false;
}
}
return true;
});
}
}
You can also do this in middleware.