winston

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

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

Начать курс

Что такое winston и зачем он нужен?

Winston — это самая популярная библиотека для логирования в среде Node.js. Она предоставляет простой, универсальный API, который позволяет записывать логи с различными уровнями важности, форматировать их и отправлять в разные места (консоль, файлы, базы данных, внешние сервисы). В отличие от простого console.log, winston даёт полный контроль над логированием: вы можете настроить ротацию логов по размеру или дате, фильтровать сообщения по уровню (info, warn, error, debug), добавлять метаданные (время, идентификатор запроса) и даже использовать несколько транспортов одновременно. Это незаменимый инструмент для мониторинга, отладки и аудита в production-приложениях.

Установка

Установите winston через npm или yarn:

npm install winston
# или
yarn add winston

Основные функции

  1. Уровни логирования: error, warn, info, http, verbose, debug, silly.
  2. Транспорты: Console, File, HTTP, Stream и кастомные.
  3. Форматы: JSON, простой текст, метки времени, цветной вывод.
  4. Комбинирование нескольких транспортов: например, ошибки в файл, а info — в консоль.
  5. Кастомные транспорты и форматы: можно интегрировать с Logstash, Sentry, Papertrail и другими.
  6. Ротация логов: через дополнительный модуль winston-daily-rotate-file.
  7. Исключения и unhandled rejection: автоматический перехват необработанных ошибок.

Пример кода на JavaScript (Node.js)

const winston = require('winston');

// Создаём логгер
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      )
    }),
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// Использование
logger.info('Сервер запущен на порту 3000');
logger.warn('Недостаточно памяти', { memoryUsage: process.memoryUsage() });
try {
  throw new Error('Что-то сломалось');
} catch (err) {
  logger.error('Ошибка при обработке запроса', { error: err.message, stack: err.stack });
}

Когда использовать

Winston идеален для любых Node.js проектов, где требуется структурированное логирование: веб-серверы (Express, Koa), микросервисы, CLI утилиты, боты, ETL-процессы. Он особенно полезен в production-среде, где нужно централизованно собирать логи, анализировать ошибки и быстро находить проблемы. Если ваш проект использует TypeScript, winston имеет полную поддержку типов.

Альтернативы: pino (быстрее, меньше), log4js (конфигурация через XML/JSON), bunyan (JSON-логи). Но winston остаётся самым гибким и распространённым решением.

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