"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Winston 및 Morgan을 사용한 고급 Node.js API 로깅

Winston 및 Morgan을 사용한 고급 Node.js API 로깅

2024-07-31에 게시됨
검색:401

Advanced Node.js API Logging with Winston and Morgan

로깅은 애플리케이션의 동작에 대한 통찰력을 제공하고 문제 디버깅을 돕고 성능을 모니터링하는 모든 애플리케이션의 중요한 부분입니다. Node.js API에서는 Winston 및 Morgan과 같은 라이브러리를 사용하여 고급 로깅을 달성할 수 있습니다. 이 문서에서는 Node.js API의 고급 로깅을 위해 Winston 및 Morgan을 설정하고 사용하는 방법을 안내합니다.

고급 로깅이 필요한 이유
고급 로깅은 다음과 같은 여러 가지 이유로 필수적입니다.

  • 디버깅 및 문제 해결: 로그는 문제를 진단할 때 매우 유용한 애플리케이션 이벤트의 자세한 기록을 제공합니다. 이는 오류의 근본 원인을 식별하고 문제로 이어지는 일련의 작업을 이해하는 데 도움이 됩니다.

  • 모니터링 및 유지 관리: 로그를 지속적으로 모니터링하면 개발자가 애플리케이션의 상태와 성능을 추적할 수 있습니다. 로그를 분석하면 이상 징후, 성능 병목 현상, 잠재적인 문제가 심각해지기 전에 이를 감지할 수 있습니다.

  • 감사 및 규정 준수: 많은 애플리케이션, 특히 중요한 데이터를 처리하는 애플리케이션의 경우 자세한 로그를 유지하는 것이 규정 준수 요구 사항입니다. 로그는 감사 및 규정 준수에 중요할 수 있는 사용자 작업 및 시스템 변경 기록을 제공합니다.

  • 보안: 로그인 시도 실패, 무단 액세스, 의심스러운 활동 등 보안 관련 이벤트를 기록하는 것은 보안 위협을 탐지하고 대응하는 데 중요합니다. 고급 로깅은 안전한 애플리케이션 환경을 유지하는 데 도움이 됩니다.

목차

  1. 윈스턴과 모건 소개
  2. Node.js 프로젝트 설정
  3. Winston 및 Morgan 설치
  4. 고급 로깅을 위한 Winston 구성
  5. HTTP 요청 로깅을 위한 Morgan 통합
  6. 윈스턴과 모건의 결합
  7. 로깅 형식 사용자 정의
  8. 다른 전송에 로깅
  9. 오류 처리 및 로깅
  10. 결론

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 요청 로깅을 단순화합니다. 이를 통해 애플리케이션 모니터링 및 디버깅 능력을 향상시키는 포괄적인 로깅 솔루션을 제공합니다.

최종 코드 개요
다음은 파일과 해당 내용을 간략하게 요약한 것입니다.

  • logger.js: 사용자 정의 형식 및 전송으로 Winston을 구성합니다.
  • middleware/logger.js: Morgan을 Winston과 통합합니다.
  • app.js: Winston과 Morgan을 모두 통합하는 Express 애플리케이션을 설정합니다. 이 설정을 사용하면 Node.js API를 효과적으로 기록하고 모니터링할 수 있으므로 유지 관리 및 디버깅이 더 쉬워집니다.
릴리스 선언문 이 기사는 https://dev.to/dev_habib_nuhu/advanced-nodejs-api-logging-with-winston-and-morgan-4fb1?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3