NodeJS에서 로그를 남겨볼게요.
어떤 서버든지 실제로 서비스를 운영하려면 로그 남기는 것은 필수에요.
특히, 로그 파일만 보고 error가 정확히 어떤 파일의 몇 번째 라인에서 발생했는지 남는 것이 중요해요.
중요한 info 로그도 남길 수 있어야 해요.
예제를 통해 알아볼게요.
우선 아래 모듈을 설치해주세요.
npm install winston winston-daily-rotate-file
logger.js
아래 코드를 복사하여 원하는 경로에 넣어주세요. 저는 config라는 폴더를 만들어서 넣었어요.
logDir 경로는 로그 파일이 저장되는 경로에요.
코드 적용하실 때에 logDir은 필수로 수정해주세요.
var winston = require('winston')
const winstonDaily = require('winston-daily-rotate-file')
const logDir = '/Users/hong/Logs/node-express'
const { combine, timestamp, printf } = winston.format
const logFormat = printf(({ timestamp, level, message, stack }) => {
if (stack) return `${timestamp} ${level} - ${message}\n${stack}`
else return `${timestamp} ${level} - ${message}`
})
var logger = winston.createLogger({
format: combine(
timestamp({
format: 'HH:mm:ss.SSS',
}),
logFormat,
),
transports: [
new winstonDaily({
level: 'info',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `app.%DATE%.log`,
maxFiles: 10,
zippedArchive: true,
}),
new winstonDaily({
level: 'error',
datePattern: 'YYYY-MM-DD',
dirname: logDir,
filename: `error.%DATE%.log`,
maxFiles: 30,
zippedArchive: true,
}),
],
})
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize()
)
}))
}
module.exports = logger
설정은 파일 하나가 끝이에요.
이제 로그를 찍어볼게요.
const logger = require('../config/logger')
logger.info('로그인')
이번엔 에러 로그를 찍어볼게요.
logger.info 와 동일하게 메시지만 찍어도 되지만 try ~ catch 에서 잡히는 stack 정보도 찍을 수 있어요.
시간, 레벨, 메시지가 한 줄 찍히고 밑으로 stack 정보가 출력될거에요.
이 부분은 logger.js 설정의 logFormat을 참고해주세요.
const logger = require('../config/logger')
try {
// TODO
} catch (err) {
logger.error(err)
}
보다 더 자세한 내용은 아래 npm package 문서를 참고해주세요.
'Backend > Node.js' 카테고리의 다른 글
Node.js (Express) mongoose 연동 (0) | 2020.12.05 |
---|---|
Node.js 패스워드 암호화 - bcrypt (0) | 2020.12.05 |
Node.js exception handler - custom error (0) | 2020.09.04 |
Node.js 파라미터 전달 (Param, Path, Body, Header) (0) | 2020.04.09 |
Node.js 재시작 없이 반영, 자동 재시작 (Supervisor) (0) | 2020.04.01 |