2eaa78f95b
Продуктовый код (фиксы, не baseline): TenantRequisites+SupplierLead — явные @property (ide-helper:models пропускал модели); DealsController V1 — лишний ?-> на non-null received_at; ScrubPii — guard instanceof Monolog. Тест-код: ImitationTestCase @param int; findByInn return-type. Baseline перегенерён — в нём ТОЛЬКО ложноположительные (Pest TestCall + защитный ?-> на nullable first() в debug-строках ScenarioBC), 0 продуктовых подавлений (проверено диффом). composer stan: 0. NB: столбцы lead-region (dadata_qc/phone_operator/region_source/resolved_subject_code) есть в БД, но отсутствуют в db/schema.sql — отдельный дрейф схемы. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
749 B
PHP
26 lines
749 B
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace App\Logging;
|
||
|
||
use Illuminate\Log\Logger;
|
||
|
||
/**
|
||
* Tap для config/logging.php: вешает PiiScrubbingProcessor на канал.
|
||
*
|
||
* Использование: 'tap' => [\App\Logging\ScrubPii::class] в описании канала.
|
||
*/
|
||
final class ScrubPii
|
||
{
|
||
public function __invoke(Logger $logger): void
|
||
{
|
||
// Illuminate\Log\Logger::getLogger() типизирован как PSR LoggerInterface,
|
||
// но фактически возвращает Monolog\Logger (у него есть pushProcessor).
|
||
$monolog = $logger->getLogger();
|
||
if ($monolog instanceof \Monolog\Logger) {
|
||
$monolog->pushProcessor(new PiiScrubbingProcessor);
|
||
}
|
||
}
|
||
}
|