로깅은 모든 애플리케이션에서 중요한 부분으로, 애플리케이션 동작에 대한 통찰력을 제공하고 문제 디버깅을 돕고 성능을 모니터링합니다. 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.윈스턴과 모건 설치
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 요청 로깅을 단순화합니다. 이를 통해 애플리케이션 모니터링 및 디버깅 능력을 향상시키는 포괄적인 로깅 솔루션을 제공합니다.
최종 코드 개요
다음은 파일과 내용을 간단히 요약한 것입니다.
위 내용은 Winston 및 Morgan을 사용한 고급 Node.js API 로깅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!