본문 바로가기
개발/에러해결

morgan winston 사용 시 파일에 이상한 특수 문자 출력 "" 해결

by amkorousagi 2022. 11. 22.

에러 내용


morgan winston ""

node js에서 log를 위해 morgan과 winston을 함께 사용했을 때 log file에서 이상한 특수문자 ""가 출력된다.

참고로 ""는 reset all modes(colors and styles)를 위해 사용되는 ANSI escape code이다.

(""는 "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를 호출하기 전에만 제거해주면 어떤 형태이든 상관없다.

 

 

결과


log file not 

이상한 특수 문자 없이 잘 출력되는 모습이다.

 

 

참고 자료


 

Remove all ANSI colors/styles from strings

I use a library that adds ANSI colors / styles to strings. For example: > "Hello World".rgb(255, 255, 255) '\u001b[38;5;231mHello World\u001b[0m' > "Hello World".rgb(255, 255, 255).bold() '\...

stackoverflow.com

 

(제가 답변한 stackoverflow)

 

Piping Morgan into Winston causes weird characters

Following this post: Node.js - logging / Use morgan and winston I setup the logger as follows; const winston = require('winston'); const datadogWinston = require('datadog-winston'); const os = requ...

stackoverflow.com

 

댓글