Express에 Logger와 Debugger 셋팅하기

Logger

logger로 morgan 패키지를 이용할 것이다.

설치

npm install -D morgan

import

import logger from 'morgan'

// ...
app.use(logger('포맷'))

Mount

인자를 통하여 log의 포맷을 정할 수 있다.

app.use(logger('dev'))
app.use(logger('common'))
app.use(logger('combined'))
app.use(logger('tiny'))

이렇게만 설정할 경우 로그 내역이 콘솔화면(process.stdout)에 출력된다.

로그내역을 .txt파일로 만들고 싶으면 두번째 인자에 stream키를 가진 옵션 객체를 넣어준다.

app.use(logger('common'), {
    stream: //writableStream
})

log file 만들기

로그 파일도 만들고 rotate기능도 추가하기 위해 다음 패키지를 설치한다.

npm i -D rotating-file-stream
import rfs from 'rotating-file-stream'

패키지를 이용하여 stream을 생성하고 옵션 객체의 stream 키의 값으로 할당한다.

app.use(logger('common'), {
    stream: rfs.createStream("로그파일이름", 옵션객체)
})

옵션객체을 통해서 rotate를 설정한다.

app.use(logger('common'), {
    stream: rfs.createStream("log.txt", {
        size: "10M", // 로그파일이 10mb일 경우, rotate log file
        interval: "1d", // or 하루가 지나면, rotate log file
        compress: "gzip" // 압축 설정
    })
})

로그파일 이름을 환경변수로 관리할 수 있다.

app.use(logger('common'), {
    stream: process.env.LOG_FILE ? rfs.createStream(process.env.LOG_FILE, {
        size: "10M", // 로그파일이 10mb일 경우, rotate log file
        interval: "1d", // or 하루가 지나면, rotate log file
        compress: "gzip" // 압축 설정
    }) : process.stdout // 로그파일이름이 주어지지 않는 경우 콘솔에 출력
})
LOG_FILE=log.txt npm start

Debugger

debug 패키지를 이용한다.

설치

npm i -D debug

import

import DBG from 'debug'

디버거 생성

다음과 같이 디버깅 함수를 생성한다.

const debug = DBG("myapp:debug")
const error = DBG("myapp:error")

DBG()에 debug의 역할을 알려주는 specifier를 부여한다.

디버거 예시

server.on("requset", (req, res) => {
    debug(`request ${req.method} ${req.url}`)
})

장점

debug가 하는 역할은 console.log와 크게 다르지 않다. 하지만 DEBUG 환경변수를 통해서 쉽게 메시징을 on & off 할 수 있다.

DEBUG=myapp:* node ./app.js # debug on

node .app.js # debug off