Логирование в JavaScript приложениях: лучшие практики — часть 3

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Логирование в JavaScript приложениях: лучшие практики — часть 3

В этой финальной части серии статей о логировании в JavaScript мы рассмотрим продвинутые техники и инструменты, которые помогут вам выстроить надёжную систему мониторинга в Node.js приложениях. Материал будет полезен как для обучения, так и для практического применения — от JavaScript для начинающих до опытных разработчиков. Мы обсудим структурированное логирование, ротацию логов, интеграцию с внешними сервисами и безопасность.

1. Структурированное логирование в Node.js

Обычный console.log() не подходит для production-среды. Вместо этого используйте библиотеки, которые генерируют JSON-логи. Это упрощает их парсинг и анализ.

Пример с библиотекой Winston

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// Использование
logger.info('Пользователь зарегистрирован', { userId: 123, email: 'user@example.com' });
logger.error('Ошибка базы данных', { error: err.message, stack: err.stack });

Такой подход позволяет легко фильтровать логи по уровню, времени и контексту. Это особенно важно при программировании микросервисов.

2. Ротация логов и управление размером

Логи могут быстро заполнить диск. Используйте ротацию — автоматическое архивирование старых файлов. В Node.js это легко реализовать с помощью модуля winston-daily-rotate-file.

Пример настройки ротации

const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: 'logs/application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  maxSize: '20m',
  maxFiles: '14d'
});

const logger = winston.createLogger({
  transports: [transport]
});

Это гарантирует, что логи не займут больше 20 МБ в день и будут храниться 14 дней.

3. Интеграция с внешними сервисами мониторинга

Для централизованного сбора логов используйте сервисы вроде Logstash, Datadog или Sentry. В JavaScript это делается через транспорты Winston.

Пример отправки логов в Logstash

const { LogstashTransport } = require('winston-logstash-transport');

const logger = winston.createLogger({
  transports: [
    new LogstashTransport({
      host: 'logstash.example.com',
      port: 5000
    })
  ]
});

Так вы сможете анализировать логи в реальном времени, строить дашборды и алерты.

4. Безопасность логирования

Никогда не логируйте чувствительные данные: пароли, токены, номера кредитных карт. Используйте фильтры или маскирующие функции.

Пример маскировки данных

function maskSensitive(obj) {
  const masked = { ...obj };
  if (masked.password) masked.password = '***';
  if (masked.token) masked.token = '***';
  return masked;
}

logger.info('Запрос пользователя', maskSensitive(req.body));

Это защитит вас от утечек и поможет соблюдать GDPR.

Заключение

В этой части мы рассмотрели ключевые практики логирования в JavaScript приложениях на Node.js: структурированные логи, ротацию, интеграцию с внешними системами и безопасность. Эти техники помогут вам создавать надёжные и удобные в поддержке системы. Для обучения рекомендуем начать с Winston и постепенно внедрять более сложные инструменты. JavaScript для начинающих может показаться сложным, но практика сделает вас профессионалом. Удачи в программировании!

Блоги

Рекомендаций по книгам