Логирование в 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 для начинающих может показаться сложным, но практика сделает вас профессионалом. Удачи в программировании!