Журналирование — это важнейшая часть любого приложения, позволяющая получить представление о поведении приложения, помогающая отлаживать проблемы и отслеживать производительность. В API Node.js расширенное ведение журнала можно обеспечить с помощью таких библиотек, как Winston и Morgan. В этой статье вы узнаете, как настроить и использовать Winston и Morgan для расширенного ведения журналов в API Node.js.
Почему требуется расширенное ведение журнала
Расширенное ведение журнала необходимо по нескольким причинам:
Отладка и устранение неполадок: журналы предоставляют подробную историю событий приложения, что имеет неоценимое значение при диагностике проблем. Они помогают выявить основную причину ошибок и понять последовательность действий, ведущих к проблеме.
Мониторинг и обслуживание: непрерывный мониторинг журналов позволяет разработчикам отслеживать работоспособность и производительность приложения. Анализируя журналы, вы можете обнаружить аномалии, узкие места в производительности и потенциальные проблемы до того, как они станут критическими.
Аудит и соответствие требованиям: Для многих приложений, особенно тех, которые обрабатывают конфиденциальные данные, ведение подробных журналов является требованием соответствия. Журналы обеспечивают запись действий пользователей и изменений в системе, что может иметь решающее значение для аудита и соблюдения нормативных требований.
Безопасность: Регистрация событий, связанных с безопасностью, таких как неудачные попытки входа в систему, несанкционированный доступ и подозрительные действия, имеет решающее значение для обнаружения угроз безопасности и реагирования на них. Расширенное ведение журнала помогает поддерживать безопасную среду приложений.
Оглавление
1.Знакомство с Уинстоном и Морганом
Winston — это универсальная и простая в использовании библиотека журналирования для Node.js. Он поддерживает несколько видов транспорта для сообщений журнала, что означает, что вы можете осуществлять вход в разные места (консоль, файлы, удаленные серверы и т. д.) с различными форматами и уровнями.
Morgan — это промежуточное программное обеспечение для регистрации HTTP-запросов для Node.js. Он упрощает регистрацию HTTP-запросов в предопределенном формате, что может быть очень полезно для отслеживания входящих запросов и ответов в API.
2.Настройка проекта Node.js
Сначала создайте новый проект Node.js, если у вас его еще нет:
mkdir node-api-logging cd node-api-logging npm init -y
3.Установка Winston and Morgan
Установите Winston и Morgan вместе с Express (для настройки базового API):
npm install express winston morgan
4.Настройка Winston для расширенного ведения журналов
Создайте файл logger.js для настройки Winston:
// logger.js const { createLogger, format, transports } = require('winston'); const { combine, timestamp, printf, errors } = format; const customFormat = printf(({ level, message, timestamp, stack }) => { return `${timestamp} ${level}: ${stack || message}`; }); const logger = createLogger({ level: 'info', format: combine( timestamp(), errors({ stack: true }), customFormat ), transports: [ new transports.Console(), new transports.File({ filename: 'logs/error.log', level: 'error' }), new transports.File({ filename: 'logs/combined.log' }) ] }); module.exports = logger;
5.Интеграция Morgan для ведения журнала HTTP-запросов
Создайте файл промежуточного программного обеспечения/logger.js для интеграции Morgan с Winston:
// middleware/logger.js const morgan = require('morgan'); const logger = require('../logger'); const stream = { write: (message) => logger.info(message.trim()) }; const morganMiddleware = morgan('combined', { stream }); module.exports = morganMiddleware;
6.Объединение Уинстона и Моргана
Интегрируйте Winston и Morgan в свое приложение Express:
// app.js const express = require('express'); const logger = require('./logger'); const morganMiddleware = require('./middleware/logger'); const app = express(); // Use Morgan middleware for HTTP request logging app.use(morganMiddleware); // Example route app.get('/', (req, res) => { logger.info('Hello world endpoint was called'); res.send('Hello, world!'); }); // Error handling middleware app.use((err, req, res, next) => { logger.error(err.message, { stack: err.stack }); res.status(500).send('Something went wrong!'); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { logger.info(`Server is running on port ${PORT}`); });
7.Настройка форматов журналов
Вы можете настроить форматы журналов в Winston и Morgan. Например, вы можете захотеть регистрировать дополнительные сведения о запросе, такие как заголовки, параметры запроса или время ответа.
8.Запись на разные транспорты
Winston поддерживает различные транспорты. Вы можете войти в разные места назначения в зависимости от серьезности сообщений. Например, вы можете отправить журналы ошибок на удаленный сервер журналирования или в стороннюю службу, например Loggly или Papertrail.
9.Обработка и регистрация ошибок
Правильная обработка и регистрация ошибок необходимы для выявления и решения проблем. Убедитесь, что ваше промежуточное программное обеспечение для обработки ошибок регистрирует подробную информацию об ошибках с помощью Winston.
10.Заключение
Объединив Winston и Morgan, вы сможете добиться расширенного ведения журналов в своем API Node.js. Winston предоставляет надежную платформу для регистрации событий уровня приложения, а Morgan упрощает регистрацию HTTP-запросов. Вместе они дают вам комплексное решение для ведения журналов, которое расширяет ваши возможности мониторинга и отладки вашего приложения.
Окончательный обзор кода
Вот краткий обзор файлов и их содержимого:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3