← Назад к вопросам
Какие есть подходы к логированию в Node.js приложениях?
2.3 Middle🔥 211 комментариев
#DevOps и инфраструктура#Архитектура и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие есть подходы к логированию в Node.js приложениях?
Логирование — критически важный аспект разработки приложений. В Node.js есть множество подходов и инструментов.
1. Встроенное логирование: console
console.log('User created:', userId);
console.error('Error occurred:', error);
console.warn('Warning message');
Проблемы: нет временных меток, нет уровней логирования, сложно фильтровать.
2. 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' }),
new winston.transports.Console(),
],
});
logger.info('Application started');
logger.error('Database connection failed');
3. Pino — быстрое структурированное логирование
const pino = require('pino');
const logger = pino({
level: process.env.LOG_LEVEL || 'info',
transport: {
target: 'pino-pretty',
},
});
logger.info({ userId: 123 }, 'User login');
logger.error({ error: err }, 'Request failed');
const childLogger = logger.child({ requestId: '123' });
childLogger.info('Processing request');
4. Bunyan — JSON логирование
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'myapp',
streams: [
{ level: 'info', stream: process.stdout },
{ level: 'error', path: './var/log/myapp.log' },
],
});
logger.info({ user: 'john' }, 'User registered');
5. Morgan — логирование HTTP запросов
const morgan = require('morgan');
const express = require('express');
const app = express();
app.use(morgan('combined'));
app.use(morgan('dev'));
const accessLogStream = fs.createWriteStream('access.log', { flags: 'a' });
app.use(morgan('combined', { stream: accessLogStream }));
6. Структурированное логирование
class UserService {
constructor(logger) {
this.logger = logger;
}
async createUser(userData) {
const startTime = Date.now();
try {
this.logger.info({ action: 'user:create', userId: userData.id }, 'Creating user');
const user = await this.saveToDatabase(userData);
this.logger.info({ action: 'user:created', userId: user.id }, 'User created');
return user;
} catch (error) {
this.logger.error({ action: 'user:create', error: error.message }, 'Failed');
throw error;
}
}
}
7. Уровни логирования
logger.error('Critical system failure');
logger.warn('Disk space running low');
logger.info('Server started');
logger.http('GET /api/users 200');
logger.debug('Query executed in 15ms');
logger.trace('Function call');
8. Контекстное логирование
const { v4: uuidv4 } = require('uuid');
app.use((req, res, next) => {
req.id = req.headers['x-request-id'] || uuidv4();
req.logger = logger.child({ requestId: req.id });
req.logger.info({ method: req.method, path: req.path }, 'Incoming request');
next();
});
app.get('/users/:id', (req, res) => {
req.logger.info({ userId: req.params.id }, 'Fetching user');
const user = getUserFromDB(req.params.id);
res.json(user);
});
9. Логирование ошибок
process.on('unhandledRejection', (reason, promise) => {
logger.error({ error: reason, type: 'unhandledRejection' });
});
process.on('uncaughtException', (error) => {
logger.error({ error: error.message, stack: error.stack });
});
10. Централизованное логирование
const logger = pino({
level: 'info',
}, pino.transport({
target: 'pino-datadog',
options: {
ddApiKey: process.env.DD_API_KEY,
service: 'my-app',
environment: process.env.NODE_ENV,
},
}));
Рекомендуемый набор
Для разработки: Pino или Winston с красивым форматированием + Morgan
Для production: Pino + транспорты в Datadog/ELK/CloudWatch + структурированное JSON
Чеклист
- Используй правильные уровни логирования
- Логируй структурированные данные (JSON)
- Добавляй контекст (requestId, userId)
- Не логируй чувствительные данные
- Используй разные транспорты для разных окружений
- Централизуй логи в production
- Ротируй и архивируй логи