Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме FastifyВсе вопросы
FastifyMiddleТеория

Как работает логирование запросов в Fastify? Как используется pino?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Fastify встраивает pino как логгер по умолчанию и автоматически логирует каждый запрос (метод, URL, statusCode, responseTime); внутри handlers используйте request.log для child-логгера с reqId, а в prod убирайте pino-pretty и пишите чистый JSON.

Базовая настройка

import Fastify from 'fastify';

const fastify = Fastify({
  logger: {
    level: 'info', // trace | debug | info | warn | error | fatal
    // В dev — читаемый формат:
    transport: {
      target: 'pino-pretty',
      options: {
        colorize: true,
        translateTime: 'SYS:standard',
        ignore: 'pid,hostname'
      }
    }
  }
});

В продакшене transport убирают — pino пишет чистый JSON в stdout, который подхватывает Loki, Elasticsearch или любой другой агрегатор.

Логирование запросов в Fastify с pino

Fastify использует pino в качестве встроенного логгера. pino — один из самых быстрых JSON-логгеров для Node.js: он пишет в stdout синхронно через нативные методы, минимизируя влияние на latency. Fastify интегрирует pino на уровне фреймворка, автоматически логируя каждый входящий запрос и ответ.

Что логируется автоматически

Без дополнительного кода Fastify логирует каждый запрос дважды:

  • incoming request — при получении запроса: метод, URL, hostname, remoteAddress, reqId
  • request completed — после отправки ответа: statusCode, responseTime (в мс)
// Пример JSON-строк в stdout:
// {"level":30,"reqId":"req-1","req":{"method":"GET","url":"/api/users","remoteAddress":"127.0.0.1"},"msg":"incoming request"}
// {"level":30,"reqId":"req-1","res":{"statusCode":200},"responseTime":12.34,"msg":"request completed"}

Использование логгера внутри handler

Каждый запрос имеет свой child-logger, связанный с reqId. Это позволяет фильтровать логи по конкретному запросу в агрегаторе.

fastify.get('/users/:id', async (request, reply) => {
  request.log.info({ userId: request.params.id }, 'fetching user');
  const user = await db.findUser(request.params.id);
  if (!user) {
    request.log.warn({ userId: request.params.id }, 'user not found');
    return reply.code(404).send({ error: 'Not found' });
  }
  request.log.debug({ user }, 'user fetched successfully');
  return user;
});

Настройка формата reqId и редактирование полей

import { randomUUID } from 'crypto';

const fastify = Fastify({
  logger: { level: 'info' },
  // Использовать UUID вместо инкрементального числа
  genReqId: (req) => req.headers['x-request-id'] ?? randomUUID(),
  // Сериализаторы — контроль над тем, что попадает в лог
  serializers: {
    req(request) {
      return {
        method: request.method,
        url: request.url,
        // НЕ логируем Authorization-заголовок:
        userAgent: request.headers['user-agent']
      };
    },
    res(reply) {
      return { statusCode: reply.statusCode };
    }
  }
});

Добавление correlation ID для distributed tracing

fastify.addHook('onRequest', async (request) => {
  // Пробрасываем trace-id от upstream (nginx, API Gateway)
  const traceId = request.headers['x-trace-id'] ?? request.id;
  // child-logger с дополнительными полями
  request.log = request.log.child({ traceId, env: process.env.NODE_ENV });
});

Логирование в production: pino + транспорт

// prod-logger.js — отдельный файл для конфигурации
const logger = {
  level: process.env.LOG_LEVEL ?? 'info',
  // pino-http совместимые поля для Loki/Grafana
  formatters: {
    level(label) { return { level: label }; } // строка вместо числа
  },
  timestamp: () => `,"timestamp":"${new Date().toISOString()}"`
};

export default logger;
// В docker-compose.yml — отправка логов в Loki:
// logging:
//   driver: loki
//   options:
//     loki-url: "http://loki:3100/loki/api/v1/push"
//     labels: "service=api"

Подводные камни

  • pino-pretty в production: этот транспорт добавляет overhead и не должен использоваться в prod; переключайтесь через переменную окружения NODE_ENV.
  • Логирование чувствительных данных: request.body может содержать пароли или токены — переопределите serializer для req, чтобы явно выбирать логируемые поля.
  • Отключение логирования снижает производительность неправильно: logger: false отключает логгер совсем, но если вы просто хотите убрать лишние поля — используйте serializers, а не отключение.
  • request.log vs fastify.log: fastify.log — глобальный логгер без reqId; request.log — child-logger с reqId. В хуках и handlers всегда используйте request.log для корреляции.
  • Уровень trace открывает много шума: уровень trace логирует внутренние события Fastify (парсинг маршрутов, вызовы hooks) — используйте только для отладки, не в prod.
  • Async transport в старых версиях pino: до pino v7 async transport требовал явной настройки; сейчас он включён по умолчанию, но важно проверить, что процесс не убивается до flush буфера (обработайте SIGTERM).

Частые вопросы на собеседовании

  • Что такое Fastify и каковы его основные преимущества перед Express.js?
  • Как работает система плагинов (plugin system) в Fastify? Что такое fastify-plugin и почему он нужен для инкапсуляции scope?
  • Что такое schema-based validation в Fastify и как используется JSON Schema?
  • Что такое lifecycle в Fastify? Перечислите основные hooks по порядку.

Типичные ошибки

  • Дает общий ответ про Node.js и не называет конкретные API Fastify.
  • Не объясняет, где в lifecycle находится логирование запросов через pino.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить логирование запросов через pino на примере кода.
  • Называет ключевые API: logger, request.log.
  • Использует точные API Fastify, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме Fastify →

Источники

  • https://fastify.dev/docs/latest/Reference/Logging/
←Предыдущий вопросЧто такое hooks в Fastify? Объясните `onRequest`, `preHandler`, `onSend` и `onError`.Следующий вопрос→Какие архитектурные решения Fastify задаёт вокруг request lifecycle, middleware, dependency model, validation и error handling?

Связанные темы

FastifyDebuggingobservability