테스트하면서 로그를 확인할때 console.log 를 주로 사용하였지만
실서버에서는 가독성이 떨어지고 상황에 로그의 시간 또는 어떤 에러로 인한 로그인지 트랙킹할때 가독성이 떨어져 사용하게됨
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 함수를 적용하여 로그 메시지의 출력 형식을 지정합니다.