Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Node.js 로깅 완벽 가이드: 미들웨어와 Winston 패키지 활용법

로깅은 Node.js든 다른 프로그래밍 언어로 개발되었든 모든 애플리케이션에서 필수적인 요소입니다. 로깅을 통해 애플리케이션의 비정상적인 동작은 물론 실시간 오류와 예외까지 효과적으로 감지할 수 있습니다. 따라서 애플리케이션에는 반드시 논리적인 로그를 남겨야 하며, 이러한 로그는 문제를 신속하게 파악하고 긴급하게 해결하는 데 큰 도움이 됩니다.

5가지 로그 레벨

현재 사용할 수 있는 로그 레벨은 총 5가지입니다. 각 로그 레벨은 서로 다른 유형의 로그를 정의하며, 다양한 상황을 구분하는 데 활용됩니다. 최상의 결과를 얻으려면 로그 레벨을 신중하게 설정해야 합니다.

  • error – 치명적인 오류 발생 시 기록

  • warn – 잠재적 문제나 경고 상황 기록

  • info – 일반적인 정보성 메시지 기록

  • verbose – 상세한 동작 정보 기록

  • debug – 디버깅 목적의 세부 정보 기록

미들웨어(Middleware) 활용

미들웨어를 요청 파이프라인에 배치하면 debug 모듈의 강력한 기능을 직접 활용해 로그를 출력할 수 있습니다. debug 모듈의 가장 큰 장점은 거의 모든 모듈이 로그 출력에 debug를 사용한다는 점입니다. debug 모듈을 통해 로그와 오류를 손쉽게 출력할 수 있습니다.

이 미들웨어는 주로 중간 파이프라인 역할을 수행합니다. 이 파이프라인을 통해 전달된 로그는 로그 파일에 기록되며, 요청(request)과 응답(response) 역시 로깅 목적으로 이 미들웨어를 거치게 됩니다. 특히 Express 앱에서 매우 유용하며, 미들웨어 설정은 간단해서 어떤 프레임워크에서도 쉽게 적용할 수 있습니다.

미들웨어 설정 방법

애플리케이션(application)

const app = express()
const logMiddleware = require('my-logging-middleware')
app.use(logMiddleware)

라우터(router)

const router = express.Router()
const routeLoggingMiddleware = require('my-route-logging-middleware')
router.use(routeLoggingMiddleware)

에러(errors)

const app = express();
const errorLoggingMiddleware = require('my-error-logging-middleware')
app.use(errorLoggingMiddleware)

Winston 패키지 활용

로깅 목적으로 winston 패키지를 사용할 수도 있습니다. winston은 다양한 로그 레벨뿐만 아니라 쿼리(query)와 프로파일러(profiler) 기능도 함께 제공합니다.

const app = express()
const winstonPackage = require('winston')
const consoleTransport = new winstonPackage.transports.Console()
const myWinstonOptions = {
    transports: [consoleTransport]
}
const logger = new winstonPackage.createLogger(myWinstonOptions)

function logRequest(req, res, next) {
    logger.info(req.url)
    next()
}
app.use(logRequest)

function logError(err, req, res, next) {
    logger.error(err)
    next()
}
app.use(logError)