PHP 版本 = 7.3.33
執(zhí)行命令 composer require webman/arms
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- webman/arms[v1.0.2, ..., v1.0.3] require openzipkin/zipkin ^3.0 -> satisfiable by openzipkin/zipkin[3.0.0].
- openzipkin/zipkin 3.0.0 requires php ^7.4 || ^8.0 -> your php version (7.3.33) does not satisfy that requirement.
- Root composer.json requires webman/arms ^1.0 -> satisfiable by webman/arms[v1.0.2, v1.0.3].
看webman/arms/composer.json
{
"name": "webman/arms",
"type": "library",
"license": "MIT",
"require": {
"php": ">=7.2",
"openzipkin/zipkin": "^3.0"
},
"autoload": {
"psr-4": {
"Webman\\Arms\\": "src"
}
}
}
openzipkin/zipkin": "^3.0
最低要求 php7.4
老大,能否把webman/arms/composer.json
中的zipkin
版本降低一個版本
這樣可能會引起誤導(dǎo)
順帶問一下,這個ARMS插件,能上報異常嗎?
因為我們在代碼中,自己接管了異常
問一下
是不是應(yīng)該在我們接管異常的那個地方,加上這段代碼
if (!$tracing) {
$endpoint = Endpoint::create(config('plugin.webman.arms.app.app_name'), $request->getRealIp(), null, 2555);
$logger = new \Monolog\Logger('log');
$logger->pushHandler(new \Monolog\Handler\ErrorLogHandler());
$reporter = new \Zipkin\Reporters\Http([
'endpoint_url' => config('plugin.webman.arms.app.endpoint_url')
]);
$sampler = BinarySampler::createAsAlwaysSample();
$tracing = TracingBuilder::create()
->havingLocalEndpoint($endpoint)
->havingSampler($sampler)
->havingReporter($reporter)
->build();
$tracer = $tracing->getTracer();
// 30秒上報一次,盡量將上報對業(yè)務(wù)的影響減少到最低
Timer::add(30, function () use ($tracer) {
$tracer->flush();
});
register_shutdown_function(function () use ($tracer) {
$tracer->flush();
});
if (class_exists('\Illuminate\Database\Events\QueryExecuted')) {
Db::listen(function (\Illuminate\Database\Events\QueryExecuted $query) {
$rootSpan = request()->rootSpan ?? null;
if ($rootSpan) {
$rootSpan->tag('db.statement', $query->sql . " /*{$query->time}ms*/");
}
});
}
}
$rootSpan = $tracer->newTrace();
$rootSpan->setName($request->controller . "::" . $request->action);
$rootSpan->start();
$request->rootSpan = $rootSpan;
$result = $next($request);
if (class_exists(\think\facade\Db::class)) {
$logs = \think\facade\Db::getDbLog(true);
if (!empty($logs['sql'])) {
foreach ($logs['sql'] as $sql) {
$rootSpan->tag('db.statement', $sql);
}
}
}
$rootSpan->finish();
return $result;