Логирование в Node.js через REST API
Отправляйте логи из Node.js и Express одним POST-запросом. Logger доставит их в подключённый клиент по WebSocket — без хранения на сервере и без настройки стека Elasticsearch.
Отправка через встроенный 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',
});
Кастомный транспорт для 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('Сервис запущен');
Особенности логирования из Node.js
- 01
Работает в Express и Fastify
Подключите middleware или транспорт на уровне приложения — никаких изменений в бизнес-логике.
- 02
Никаких блокировок
Отправка не блокирует event loop: используйте fetch без await или setImmediate, как в примере с winston.
- 03
Без хранения на сервере
Logger — это доставка в реальном времени. Архив логов на стороне сервера не ведётся.
Частые вопросы
Как логировать запросы Express в Logger?
Добавьте middleware, который вызывает log(req.method + " " + req.originalUrl) после ответа. Полный пример есть на этой странице, а описание полей запроса — в документации API.
Совместим ли Logger с winston и pino?
Да. Для winston подойдёт кастомный Transport из примера, для pino — свой stream или hook, который вызывает тот же POST-запрос.
Что делать, если Logger недоступен?
Оберните отправку в try/catch или .catch(() => {}) — логирование не должно ронять приложение. Logger не хранит логи, поэтому недоступность доставки не влияет на бизнес-данные.
Отправка логов из других языков
Поймайте следующее событие.
Откройте клиент, получите Consumer Key и отправьте первый лог из Node.js.