winston format 사용 시, object 출력

백엔드 쪽에서, morgan을 winston으로 교체하는 과정에서 object가 console.log 와는 다른 형태로 출력되는 것을 확인.

여러 웹 사이트를 뒤지다 보니, JSON.stringify() 를 사용하면 된다고도 하고, util.format을 사용하면 된다고도 합니다.

둘 모두 적용해 보니, 어떤 것을 사용하던 관계는 없는 것 같은데, 일단 사용 예는 아래의 GIST 코드를 붙여서 올립니다.

다만, object 내의 object는 recursive 하게 변경해주지 않는 것 같은데... 이 부분까진 그닥 필요가 없어서.... -_-;

 

아래의 샘플로그 처럼, 하나의 object를 출력 할 때, 해당 object 문자열의 앞에 매번 포멧팅된 문자열이 나오는 것이 싫으시다면(로그 용량 같은 문제?), 아래와 같이 printf 함수 내용을 수정하시면 됩니다.

// Before
printf(({ level, message, timestamp }) => {
  level = level.toUpperCase()

  return util.format('%o', message).trim().split('\n').map((line) => {
    return `${timestamp} [${level}]: ${line}`
  }).join('\n')
})

// After
printf(({ level, message, timestamp }) => {
  level = level.toUpperCase()
  return `${timestamp} [${level}]: ${util.format('%o', message)}`
})

 

Winston format 에서 object 출력을 위한 코드와 샘플로그 예

Comment