pino логгер
Тема дорожной карты · Node.js
pino — это чрезвычайно быстрая, малозатратная библиотека структурированного логирования для Node.js, сериализующая записи логов как JSON с разделением по строкам, что делает её идеально подходящей для продакшн-серверной разработки, где важны объём логов и скорость парсинга. pino достигает своей производительности за счёт синхронной записи JSON в транспорт в минимальном формате и делегирования форматирования, фильтрации и доставки логов отдельному рабочему процессу или внешнему инструменту, что не блокирует основной цикл событий Node.js. Npm-пакет pino предоставляет фильтрацию по уровню логирования (trace, debug, info, warn, error, fatal), дочерние логгеры для контекста в рамках запроса через logger.child({ requestId }) и богатую экосистему транспортов, включая pino-pretty для читаемого вывода при разработке и pino/file для записи на диск. Интеграция с HTTP-фреймворками проста — Fastify использует pino нативно, а в приложениях Express.js можно применять middleware pino-http для автоматического логирования каждого запроса с длительностью, кодом статуса и корреляционными идентификаторами. Для TypeScript-проектов pino поставляется со встроенными декларациями типов и является рекомендуемым структурированным логгером для наблюдаемых сервисов Node.js.
Как это работает
pino логгер имеет три столпа в Node: метрики (Prometheus-style counters/histograms через prom-client), логи (структурированный JSON через pino/winston, отправляется в Loki/Elastic), distributed tracing (OpenTelemetry SDK + exporter в Jaeger/Tempo). Node имеет встроенные performance hooks (perf_hooks), HTTP request/response события, async-local-storage (node:async_hooks) для request-scoped контекста. Всегда логируйте trace ID на каждую строку для корреляции.
Когда применять
Структурированное логирование — с первого дня; pino — современный дефолт (быстрее winston, JSON-first). Prometheus-эндпойнт (/metrics) — на любой сервис с реальным трафиком. OpenTelemetry tracing — когда сервисов больше одного или хотите дебажить latency через границы. Алёрты на event-loop lag, HTTP error rate, рост памяти — ловят баги, на которые "приложение работает нормально".
Типичные ошибки
Ловушки pino логгер: console.log повсюду в production (без структуры, дорого grep-ать, без уровней); логирование секретов (карты, токены); high-cardinality метрики (request-id убивает Prometheus); tracing без sampling (трейсы перегружают backend); нет политики retention для логов (диск забивается, история теряется). Observability — фича, не afterthought.