ИНТЕГРАЦИЯ / NODE.JS

Логирование в Node.js через REST API

Отправляйте логи из Node.js и Express одним POST-запросом. Logger доставит их в подключённый клиент по WebSocket — без хранения на сервере и без настройки стека Elasticsearch.

Один POST-запросБез хранения логов на сервере
01 / БЫСТРЫЙ СТАРТ

Отправка через встроенный fetch

Отправьте первое событие из Node.js за пару минут. Consumer Key выдаётся после регистрации в веб-интерфейсе.

const URL = "https://logger.dp-projects.ru/sendmess";

async function log(module, mess) {
  await fetch(URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      key: 'ваш-consumer-key',
      module,
      mess,
      mode: 'regular',
    }),
  });
}

log('payment-service', {
  event: 'payment_processed',
  amount: 1000,
  status: 'success',
});
02 / ИНТЕГРАЦИЯ С ФРЕЙМВОРКОМ

Кастомный транспорт для winston

Winston — самый популярный логгер в экосистеме Node.js. Добавьте транспорт, и все существующие вызовы logger.info/warn/error начнут уходить в Logger.

const winston = require('winston');
const Transport = require('winston-transport');

const URL = "https://logger.dp-projects.ru/sendmess";

class LoggerAPITransport extends Transport {
  constructor(opts = {}) {
    super(opts);
    this.key = opts.key;
  }

  log(info, callback) {
    setImmediate(() => this.emit('logged', info));

    fetch(URL, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        key: this.key,
        module: info.module || 'node-app',
        mess: { level: info.level, message: info.message },
      }),
    }).catch(() => {});

    callback();
  }
}

const logger = winston.createLogger({
  transports: [new LoggerAPITransport({ key: 'ваш-consumer-key' })],
});

logger.info('Сервис запущен');
03 / ЧТО ВАЖНО ЗНАТЬ

Особенности логирования из Node.js

  1. 01

    Работает в Express и Fastify

    Подключите middleware или транспорт на уровне приложения — никаких изменений в бизнес-логике.

  2. 02

    Никаких блокировок

    Отправка не блокирует event loop: используйте fetch без await или setImmediate, как в примере с winston.

  3. 03

    Без хранения на сервере

    Logger — это доставка в реальном времени. Архив логов на стороне сервера не ведётся.

04 / ВОПРОСЫ

Частые вопросы

Как логировать запросы Express в Logger?

Добавьте middleware, который вызывает log(req.method + " " + req.originalUrl) после ответа. Полный пример есть на этой странице, а описание полей запроса — в документации API.

Совместим ли Logger с winston и pino?

Да. Для winston подойдёт кастомный Transport из примера, для pino — свой stream или hook, который вызывает тот же POST-запрос.

Что делать, если Logger недоступен?

Оберните отправку в try/catch или .catch(() => {}) — логирование не должно ронять приложение. Logger не хранит логи, поэтому недоступность доставки не влияет на бизнес-данные.

05 / ДРУГИЕ ЯЗЫКИ
ГОТОВЫ К ПОДКЛЮЧЕНИЮ?

Поймайте следующее событие.

Откройте клиент, получите Consumer Key и отправьте первый лог из Node.js.

Начать работу