Что такое 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-проектах. Он даёт гибкость, производительность и типовую безопасность при правильной настройке. Начните с простого логгера и расширяйте его по мере роста приложения.