# Runbook: PII-scrubbing логов

**Дата:** 2026-06-17 · **Зона:** `app/` (backend) · **Связано:** Medium go-live (логи без маскирования ПДн)

## Что сделано

- `App\Logging\PiiScrubbingProcessor` (Monolog 3) — маскирует ПДн в `message`/
  `context`/`extra` каждой записи: телефоны РФ (`7/8/+7` + 10 цифр) → `[PHONE]`,
  email → `[EMAIL]`. Контекст обходится рекурсивно; не-строки не трогаются;
  длинные цифровые id не маскируются (lookbehind/lookahead).
- `App\Logging\ScrubPii` — tap, вешает процессор на канал.
- `config/logging.php` — `'tap' => [ScrubPii::class]` на каналах `single` и `daily`
  (оба пишут в `laravel.log` — задокументированный риск).

## Покрытие и расширение

- Покрыты файловые каналы `single`/`daily` (и `stack`, т.к. делегирует в `single`).
- `stderr`/`papertrail` (driver `monolog`) — расширяются добавлением
  `PiiScrubbingProcessor::class` в их `'processors'` массив; `slack`/`syslog`/
  `errorlog` — через `'tap'`. Отложено как отдельный шаг (forward-рекомендация наставника).

## Sentry (OPEN-И-16) — фактическая находка

Проверено по `app/composer.json`: пакет `sentry`/`sentry-laravel` **НЕ установлен**;
`config/sentry.php` отсутствует; Sentry в приложении не сконфигурирован. Поэтому
«регекс-маска в config/sentry.php» **не реализуема в коде** на текущем состоянии —
это инфраструктурный Sentry (self-hosted) без Laravel-SDK интеграции. Отдельный
open-item для владельца: либо установить sentry-laravel + `before_send` scrubbing,
либо подтвердить, что приложение не шлёт события в Sentry.

## Проверка

`php artisan test tests/Feature/Logging/PiiScrubbingProcessorTest.php` (из `app`).
