에러 내용
node js에서 log를 위해 morgan과 winston을 함께 사용했을 때 log file에서 이상한 특수문자 "[0m"가 출력된다.
참고로 "[0m"는 reset all modes(colors and styles)를 위해 사용되는 ANSI escape code이다.
("[0m"는 "ESC[0m"으로도 적을 수 있다.)
에러 원인
morgan에서 console에 출력하기 위해 color를 입히는( colorize ) 과정에서 특수문자가 들어가는데, morgan에서 winston으로 만든 logger를 사용할 때 특수문자 ( ANSI colors/styles )가 포함된 string을 그대로 전달하기 때문이다. 콘솔이나 터미널과 다르게 로그 파일에서는 이러한 특수문자가 적용되지 않기에 이상하게 출력된다.
해결 방법
regex를 사용해서 문제가 되는 특수문자를 제거하자.
const stream = {
write: (message) => {
// 특수문자 제거 후 출력
logger.http(
message.replace(
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,
""
)
);
},
};
morgan에서 winston으로 만드는 logger의 logger.http를 호출하기 전에만 제거해주면 어떤 형태이든 상관없다.
결과
이상한 특수 문자 없이 잘 출력되는 모습이다.
참고 자료
(제가 답변한 stackoverflow)
댓글