Логирование в TypeScript: библиотека winston

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

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

Начать курс

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

Winston — это мощная и гибкая библиотека для логирования в приложениях на TypeScript и JavaScript. Она позволяет структурированно записывать сообщения разного уровня (info, warn, error, debug) в консоль, файлы, базы данных или внешние сервисы. Winston решает проблему отсутствия встроенного механизма логирования в Node.js, предоставляя удобный API для настройки форматов, транспортов (куда писать логи) и уровней важности. Библиотека широко используется в продакшн-проектах, микросервисах и веб-приложениях.

Установка

Для установки winston в проект на TypeScript выполните:

npm install winston
npm install --save-dev @types/winston

Или через yarn:

yarn add winston
yarn add --dev @types/winston

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

  • Уровни логирования: error, warn, info, http, verbose, debug, silly (можно настроить свои).
  • Транспорты: Console, File, HTTP, Stream, а также кастомные (например, в Elasticsearch).
  • Форматы: JSON, простой текст, timestamp, метки, цвета в консоли.
  • Множественные транспорты: одновременно писать в консоль и файл.
  • Логирование исключений: автоматический перехват uncaughtException.
  • Прокси-обёртка для TypeScript: типизированный логгер с автодополнением.

Пример кода на TypeScript

import winston from 'winston';

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    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('Низкий уровень памяти');
logger.error('Ошибка подключения к БД', { error: err });

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

Winston идеально подходит для:

  • Backend-приложений на Node.js/TypeScript (Express, NestJS, Fastify).
  • Микросервисной архитектуры — централизованный сбор логов через HTTP-транспорт.
  • Продакшн-мониторинга — запись логов в файлы с ротацией (winston-daily-rotate-file).
  • Отладки и разработки — цветной вывод в консоль с разными уровнями.
  • Систем с требованиями к аудиту — структурированные логи в JSON для анализа.

Не используйте winston в простых скриптах, где достаточно console.log — для малых проектов избыточно. Также избегайте winston в клиентских браузерных приложениях (там лучше использовать console или специализированные библиотеки).

Заключение

Winston — стандарт де-факто для логирования в TypeScript-проектах. Он даёт гибкость, производительность и типовую безопасность при правильной настройке. Начните с простого логгера и расширяйте его по мере роста приложения.

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