로깅은 애플리케이션의 동작에 대한 통찰력을 제공하고 문제 디버깅을 돕고 성능을 모니터링하는 모든 애플리케이션의 중요한 부분입니다. Node.js API에서는 Winston 및 Morgan과 같은 라이브러리를 사용하여 고급 로깅을 달성할 수 있습니다. 이 문서에서는 Node.js API의 고급 로깅을 위해 Winston 및 Morgan을 설정하고 사용하는 방법을 안내합니다.
고급 로깅이 필요한 이유
고급 로깅은 다음과 같은 여러 가지 이유로 필수적입니다.
디버깅 및 문제 해결: 로그는 문제를 진단할 때 매우 유용한 애플리케이션 이벤트의 자세한 기록을 제공합니다. 이는 오류의 근본 원인을 식별하고 문제로 이어지는 일련의 작업을 이해하는 데 도움이 됩니다.
모니터링 및 유지 관리: 로그를 지속적으로 모니터링하면 개발자가 애플리케이션의 상태와 성능을 추적할 수 있습니다. 로그를 분석하면 이상 징후, 성능 병목 현상, 잠재적인 문제가 심각해지기 전에 이를 감지할 수 있습니다.
감사 및 규정 준수: 많은 애플리케이션, 특히 중요한 데이터를 처리하는 애플리케이션의 경우 자세한 로그를 유지하는 것이 규정 준수 요구 사항입니다. 로그는 감사 및 규정 준수에 중요할 수 있는 사용자 작업 및 시스템 변경 기록을 제공합니다.
보안: 로그인 시도 실패, 무단 액세스, 의심스러운 활동 등 보안 관련 이벤트를 기록하는 것은 보안 위협을 탐지하고 대응하는 데 중요합니다. 고급 로깅은 안전한 애플리케이션 환경을 유지하는 데 도움이 됩니다.
목차
1.윈스턴과 모건 소개
Winston은 다재다능하고 사용하기 쉬운 Node.js용 로깅 라이브러리입니다. 로그 메시지에 대한 다중 전송을 지원하므로 다양한 형식과 수준으로 다양한 위치(콘솔, 파일, 원격 서버 등)에 로그할 수 있습니다.
Morgan은 Node.js용 HTTP 요청 로거 미들웨어입니다. 사전 정의된 형식으로 HTTP 요청 로깅을 단순화하므로 API에서 들어오는 요청과 응답을 추적하는 데 매우 유용할 수 있습니다.
2.Node.js 프로젝트 설정
먼저, 아직 Node.js 프로젝트가 없다면 새 Node.js 프로젝트를 생성하세요:
mkdir node-api-logging cd node-api-logging npm init -y
3.Winston 및 Morgan 설치
Express와 함께 Winston 및 Morgan을 설치합니다(기본 API 설정용):
npm install express winston morgan
4.고급 로깅을 위한 Winston 구성
Winston을 구성하기 위해 logger.js 파일을 만듭니다:
// 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.HTTP 요청 로깅을 위한 Morgan 통합
Morgan을 Winston과 통합하기 위해 middleware/logger.js 파일을 생성하십시오:
// 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을 결합하면 Node.js API에서 고급 로깅을 달성할 수 있습니다. Winston은 애플리케이션 수준 이벤트 로깅을 위한 강력한 프레임워크를 제공하는 반면 Morgan은 HTTP 요청 로깅을 단순화합니다. 이를 통해 애플리케이션 모니터링 및 디버깅 능력을 향상시키는 포괄적인 로깅 솔루션을 제공합니다.
최종 코드 개요
다음은 파일과 해당 내용을 간략하게 요약한 것입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3