承接 replaystack/sdk 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

replaystack/sdk

最新稳定版本:v1.0.2

Composer 安装命令:

composer require replaystack/sdk

包简介

ReplayStack PHP SDK — backend event capture, exception tracing, and replay debugging for Laravel, Symfony, Slim, and plain PHP.

README 文档

README

Backend event capture, exception tracing, and replay debugging for PHP — feature parity with the TypeScript and Python SDKs.

Drop-in support for Laravel, Symfony, Slim, and plain PHP. Built on PSR-7 / PSR-15 so it also slots into Mezzio, Yii 3, Tempest, Roadrunner, FrankenPHP — anything PSR-15 friendly.

PHP Version Tests

Highlights

  • One-line setup for Laravel, Symfony, Slim
  • Per-request breadcrumb scope (no cross-talk between concurrent FPM workers / Swoole / RR coroutines)
  • Sensitive-data masking with case-insensitive field matching and circular-reference safety
  • Probabilistic sampling + ignore-paths with glob support (/internal/*)
  • Offline queue with retry + queue-drop hook
  • flush() / close() lifecycle, plus auto-flush on PHP shutdown
  • Process guards: uncaught exceptions, fatal errors, FPM graceful shutdown
  • Auth-mode auto-detection (bearer, basic, api_key, cookie, other, none)
  • camelCase wire format identical to TS/Python SDKs — same backend, no surprises

Installation

composer require replaystack/sdk

Requirements:

  • PHP 8.1+
  • ext-curl
  • ext-json

Quick start (any framework, any runtime)

use ReplayStack\Sdk\Config;
use ReplayStack\Sdk\ReplayStack;
use ReplayStack\Sdk\Runtime\ProcessGuards;

$client = new ReplayStack(new Config(
    apiKey: getenv('REPLAYSTACK_API_KEY'),
    serviceName: 'orders-api',
    environment: 'production',
    sampleRate: 1.0,
    maskFields: ['phoneNumber', 'ssn'],
    ignoredPaths: ['/health', '/internal/*'],
));

// Capture uncaught exceptions, fatal errors, and flush on shutdown.
ProcessGuards::install($client);

$client->addBreadcrumb('checkout started', 'http', 'info', ['orderId' => 42]);

try {
    // ...your code...
} catch (\Throwable $e) {
    $client->captureException($e, ['endpoint' => '/checkout', 'statusCode' => 500]);
    throw $e;
}

Laravel

The package auto-registers a service provider and facade.

composer require replaystack/sdk
php artisan vendor:publish --tag=replaystack-config

.env:

REPLAYSTACK_API_KEY=rs_live_xxxxxxxxxxxxxxxx
REPLAYSTACK_ENVIRONMENT=${APP_ENV}
REPLAYSTACK_SAMPLE_RATE=1.0

Use the facade anywhere:

use ReplayStack\Sdk\Integrations\Laravel\Facades\ReplayStack;

ReplayStack::addBreadcrumb('querying products', 'db');
ReplayStack::captureException($e, ['endpoint' => '/products']);

See docs/LARAVEL.md.

Symfony

composer require replaystack/sdk

config/bundles.php:

return [
    ReplayStack\Sdk\Integrations\Symfony\ReplayStackBundle::class => ['all' => true],
];

config/packages/replaystack.yaml:

replaystack:
    api_key: '%env(REPLAYSTACK_API_KEY)%'
    environment: '%env(APP_ENV)%'
    sample_rate: 1.0

The bundle wires a kernel.event_subscriber that captures every non-ignored request, attaches breadcrumbs, and propagates x-trace-id automatically.

See docs/SYMFONY.md.

Slim / PSR-15

use ReplayStack\Sdk\Integrations\Slim\ReplayStackMiddleware;
use ReplayStack\Sdk\Integrations\Psr15\MiddlewareOptions;

$app->add(new ReplayStackMiddleware($client, new MiddlewareOptions(
    ignoredPaths: ['/health', '/internal/*'],
)));

For raw PSR-15 (Mezzio, etc.), import ReplayStack\Sdk\Integrations\Psr15\ReplayStackMiddleware directly.

See docs/SLIM.md.

Configuration

Every option can be set via env var or constructor argument; the constructor wins.

Env var Config field Default
REPLAYSTACK_API_KEY apiKey required
REPLAYSTACK_ENDPOINT endpoint https://api.replaystack.co
REPLAYSTACK_INGEST_URL ingestUrl {endpoint}/api/v1/ingest/events
REPLAYSTACK_SERVICE_NAME serviceName
REPLAYSTACK_ENVIRONMENT environment APP_ENV or development
REPLAYSTACK_APP_VERSION appVersion APP_VERSION
REPLAYSTACK_COMMIT_HASH commitHash COMMIT_HASH
REPLAYSTACK_ENABLED enabled true
REPLAYSTACK_TIMEOUT_MS timeoutSeconds 2.5s
REPLAYSTACK_RETRIES maxRetries 1
REPLAYSTACK_SAMPLE_RATE sampleRate 1.0
REPLAYSTACK_CAPTURE_SUCCESS captureSuccess true
REPLAYSTACK_MAX_PAYLOAD_SIZE_BYTES maxPayloadBytes 524288
REPLAYSTACK_MAX_BREADCRUMBS maxBreadcrumbs 50
REPLAYSTACK_OFFLINE_QUEUE_MAX offlineQueueMax 100
REPLAYSTACK_FLUSH_INTERVAL_MS flushIntervalSeconds 0 (off)

Data masking

By default the following fields are scrubbed wherever they appear in headers or request/response payloads:

authorization, password, passwd, pwd, token, access_token, refresh_token,
apikey, api_key, secret, client_secret, cookie, set-cookie, cardnumber,
card_number, cvv, otp

Matching is case-insensitive and treats - / _ / space as equivalent. Add your own with maskFields: ['phone_number', 'national_id'].

Lifecycle

$client->flush();          // synchronously drain the offline queue
$client->flush(2.0);       // with a deadline
$client->close();          // stop accepting + drain

ProcessGuards::install($client) additionally:

  • forwards uncaught exceptions to captureException() and re-throws
  • captures fatal errors (E_ERROR, E_PARSE, E_USER_ERROR, ...) via register_shutdown_function
  • calls fastcgi_finish_request() before flushing under FPM so user-visible latency is unchanged

Testing

composer install
vendor/bin/phpunit

44 tests / 200+ assertions covering utils, masking, auth detection, stacktrace parsing, client lifecycle, offline queue, and the PSR-15 middleware.

License

MIT — see LICENSE.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 11
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-13

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固