Pino

Node.js를 위한 매우 빠르고 가벼운 로깅 라이브러리.
“pine(소나무)“에서 이름을 따왔으며, 성능과 간결함에 중점을 둔 라이브러리.

Pino의 주요 특징

  1. 빠른 속도: Pino는 다른 로깅 라이브러리보다 약 5배 정도 빠르다.
  2. 낮은 오버헤드: 최소한의 리소스를 사용하여 애플리케이션의 성능에 미치는 영향을 줄인다.
  3. JSON 형식: 로그를 JSON 형식으로 출력하여 쉽게 파싱하고 분석할 수 있다.
  4. 비동기 로깅: 로그 작성이 애플리케이션의 주 실행을 방해하지 않는다.
  5. 다양한 로그 레벨: fatal, error, warn, info, debug, trace 등 여러 레벨의 로그를 지원한다.

Pino의 장점

  1. 성능: 빠른 속도로 애플리케이션의 성능을 크게 저하시키지 않는다.
  2. 구조화된 로깅: JSON 형식으로 로그를 쉽게 분석할 수 있다.
  3. 확장성: 다양한 플러그인과 통합이 가능하다.

Pino 시작하기: 실습 중심 가이드

1. 설치하기

터미널에서 다음 명령어를 실행한다:

1
2
3
npm install pino
# 선택적으로 pretty 출력을 원한다면
npm install pino-pretty

2. 기본 사용법

1
2
3
4
5
6
7
8
// logger.js
const pino = require('pino')()  // 기본 로거 생성

// 다양한 로깅 레벨 사용
logger.info('일반 정보 메시지')
logger.warn('경고 메시지')
logger.error('에러 메시지')
logger.debug('디버그 메시지')

3. 로그 레벨 이해하기

Pino는 다음과 같은 로그 레벨을 제공한다:

  • trace: 가장 상세한 로깅
  • debug: 개발 중 디버깅 정보
  • info: 일반적인 정보
  • warn: 경고 메시지
  • error: 에러 상황
  • fatal: 심각한 오류

4. 로그에 메타데이터 추가하기

1
logger.info({ user: 'John', action: 'login' }, '사용자 로그인')

이렇게 하면 로그 메시지와 함께 추가 정보를 JSON 형식으로 기록할 수 있다.

5. 예쁜 로그 출력하기

1
2
3
4
5
6
7
8
const logger = require('pino')({
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true
    }
  }
})

실제 활용 예시

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
const pino = require('pino')
const logger = pino({
  level: 'info',  // 로깅 레벨 설정
  timestamp: pino.stdTimeFunctions.isoTime  // ISO 형식 타임스탬프
})

function processUserLogin(username) {
  try {
    // 로그인 처리 로직
    logger.info({ username }, '사용자 로그인 시도')
    
    // 성공적인 로그인
    logger.info({ username }, '사용자 로그인 성공')
  } catch (error) {
    // 로그인 실패 시
    logger.error({ 
      username, 
      errorMessage: error.message 
    }, '로그인 중 오류 발생')
  }
}

참고 및 출처

Pino - Super fast, all natural JSON logger for Node.js