nestjs & nodejs
Nodejs에서 winston Logger 사용해보기
developertaeng
2023. 10. 10. 08:39
테스트하면서 로그를 확인할때 console.log 를 주로 사용하였지만
실서버에서는 가독성이 떨어지고 상황에 로그의 시간 또는 어떤 에러로 인한 로그인지 트랙킹할때 가독성이 떨어져 사용하게됨
winston의 장점
- Winston은 로그 레벨 및 출력 형식을 사용자 정의할 수 있으므로 프로덕션 환경에서 로깅을 더 효과적으로 관리할 수 있습니다.
- Winston은 다양한 출력 대상(트랜스포트)을 지원합니다. 파일, 콘솔, 데이터베이스, HTTP 요청 등 다양한 대상으로 로그를 보낼 수 있습니다.
- Winston은 다양한 로그 레벨(예: info, warn, error)을 지원하여 각각의 중요도에 따라 로그를 기록하고 관리할 수 있습니다.
const winston = require('winston');
const {format} = winston;
//콘솔의 포멧을 지정
//level { error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }
const printformat = format.printf(({level,message,label,timestamp})=>{
return `${timestamp} [${label}] ${level}: ${message}`;
});
const logger = winston.createLogger({
transports:[
new winston.transports.Console({
// 로그 형식(format)을 정의
// 레이블, 타임스탬프, 밀리초, 색상 등 다양한 정보를 출력하기
// 위한 형식을 조합합니다.
format:format.combine(
format.label({label: 'test' }),
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
//밀리세크까지 트랙킹합니다.
format.ms(),
//색상을 지정합니다.
format.colorize(),
printformat
)
})
]
});
logger.info('test');
logger.debug('debug');
logger.silly('silly');
module.exports = logger;
- const printformat = format.printf(({ level, message, label, timestamp }) => {...});: printformat 변수에 로그 메시지를 출력하기 위한 형식을 정의합니다. 이 형식은 로그 레벨, 메시지, 레이블, 타임스탬프 등을 출력하는데 사용됩니다.
- winston.createLogger({ ... });: winston.createLogger 메서드를 사용하여 로그를 관리하는 logger 객체를 생성합니다.
- new winston.transports.Console({ ... }): logger에 출력 대상이 콘솔(console)인 새로운 트랜스포트(transport)를 추가합니다. 이것은 로그를 콘솔에 출력하는 역할을 합니다.
- format: format.combine(...): 로그 형식(format)을 정의합니다. 이 부분에서는 레이블, 타임스탬프, 밀리초, 색상 등 다양한 정보를 출력하기 위한 형식을 조합합니다.
- printformat: 앞서 정의한 printformat 함수를 적용하여 로그 메시지의 출력 형식을 지정합니다.