# Observability - Единственный logger — nestjs-pino. Application events используют [StructuredLogger](../../src/common/logging/structured-logger.service.ts), стабильное имя события и разрешённые scalar fields. `console.log` и второй logger в production не используются. - `info` — значимый lifecycle/outcome; `debug` — подробности успешного RPC; `warn` — восстановимая проблема/retry; `error` — окончательный сбой. Не добавляй log на каждый вход/выход функции или дубликат HTTP completion. - Native `nestjs-pino` context и `pino-http` completion владеют correlation: server request ID возвращается как `X-Request-ID`, client ID хранится отдельно. Настройки принадлежат `common/logging/logging.module.ts`; второй AsyncLocalStorage или HTTP completion middleware не нужен. Передавай существующий context, не создавай собственный UUID в каждом service. - StructuredLogger ограничивает поля, Pino redacts request secrets. Не логируй passwords, tokens, cookie, Authorization, credentials, connection generation, raw body или upstream error. Secret в `message/stack` не становится безопасным из-за allowlist; правила [Security](security-auth.md) обязательны для sensitive data. - Для ошибки используй public code и безопасный context операции/попыток; [error mapping](error-handling.md) не отдаёт внутренние детали клиенту. Проверяй новые поля/redaction/correlation existing logging tests; не добавляй тест на каждую строку log. Existing ESLint не запрещает все вызовы `console` отдельным правилом: до настройки встроенного `no-console` это semantic review.