💩
LaravelでSentryのシリアライザをカスタマイズする
本記事でやること
PHP SDK for Sentryでは関数の実引数なども報告してくれるが、LaravelのCollectionなどは
Object Illuminate\Support\Collection
のように報告されて手がかりゼロになってしまう:
このように改善する
公式doc
コード例
MyRepresentationSerializer.php
use Illuminate\Support\Collection;
use Sentry\Serializer\RepresentationSerializer;
class MyRepresentationSerializer extends RepresentationSerializer
{
public function representationSerialize($value)
{
if ($value instanceof Collection) {
return var_export($value, true);
}
return parent::representationSerialize($value);
}
}
今回は雑に継承しましたが真面目にやるならComposite組むなどしたほうがいいと思います
AppServiceProvider.php
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ...
$this->app->extend(
ClientBuilderInterface::class,
function (ClientBuilderInterface $clientBuilder): ClientBuilderInterface {
$clientBuilder->setRepresentationSerializer(new MyRepresentationSerializer($clientBuilder->getOptions()));
return $clientBuilder;
}
);
// ...
}
2022/3/11追記
var_export
は循環参照があると死ぬので Symfony の VarDumper 等を使ったほうが良いですね
Discussion