15.1.6 winston
실제 서버를 운영할 때 console.log와 console.error를 대체하기 위한 모듈입니다.
console.log와 console.error를 사용하면 개발 중에는 편리하게 서버의 상황을 파악할 수 있지만, 실제 배포 시에는 사용하기 어렵습니다. console 객체의 메서드들이 언제 호출되었는지 파악하기 힘들 뿐만 아니라 서버가 종료되는 순간 로그들도 사라져버리기 때문입니다. 에러가 발생하면 에러 메시지를 확인해야 하는데, 서버가 종료돼서 에러 메시지들이 날아가버리는 황당한 일이 일어나게 됩니다. 이와 같은 상황을 방지하려면 로그를 파일이나 다른 데이터베이스에 저장해야 합니다. 이때 winston을 사용합니다.
winston을 설치하고 사용 방법을 간단히 알아보겠습니다. 너무나 다양한 방식으로 활용할 수 있어 기본적인 것만 살펴봅니다.
콘솔
$ npm i winston
winston을 설치한 뒤, logger.js를 작성합니다.
logger.js
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
format: format.json(),
transports: [
new transports.File({ filename: 'combined.log' }),
new transports.File({ filename: 'error.log', level: 'error' }),
],
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({ format: format.simple() }));
}
module.exports = logger;