winston 라이브러리로 저장되는 log file에 color error

cochae·2022년 11월 10일
0

error

목록 보기
5/5

winston 라이브러리 사용 시 log file에 color가 제대로 표시 되지 않았다.

여러 블로그 참고해서 winston으로 log를 파일로 저장되도록 설정했다.
문제는 터미널에서는 색상이 제대로 적용되지만, 저장된 파일에서는 이상한 이모티콘이 생겼다.

import * as winston from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
import path from "path";

// 절대 경로 설정
const ___dirname = path.resolve();
// 파일 저장 위치 설정
const logDir = `${___dirname}/src/logs/`;

const colors = {
  error: "red",
  info: "blue",
};

winston.addColors(colors);

//공통 포맷 설정
const format = winston.format.combine(
  winston.format.timestamp({ format: " YYYY-MM-DD HH:mm:ss ||" }),
  //winston.format.colorize({ all: true }),
  //색 추가 관련 오류가 나는 부분. 터미널에선 잘 적용되는데, log파일에서 오류.
  winston.format.printf(
    (info) => `${info.timestamp} ${info.level} | ${info.message}`
  )
);

const transport: DailyRotateFile = new DailyRotateFile({
  filename: `${logDir}/%DATE%.log`,
  datePattern: "YYYY-MM-DD",
  zippedArchive: true,
});

//공통 포맷 설정 추가와 함께 'info'/'error' 레벨 저장 공간 분리
export const logger = winston.createLogger({
  format,
  transports: [
    new winston.transports.DailyRotateFile({
      level: "info",
      datePattern: "YYYY-MM-DD",
      dirname: logDir,
      filename: `%DATE%.log`,
      handleExceptions: true,
    }),
    new winston.transports.DailyRotateFile({
      level: "error",
      datePattern: "YYYY-MM-DD",
      dirname: logDir + "/error",
      filename: `%DATE%.error.log`,
    }),
    new winston.transports.Console({ handleExceptions: true }),
  ],
});

개발 환경

  • IDE : vscode
  • node 16.18.1 / winston 3.8.2 / winston-daily-rotate-file 4.7.1

👉 vscode에서 log extention 설치 후 설정하기

어차피 error는 따로 저장되기 때문에 큰 무리 없이 사용하고 있다가 해결책이 뭘까 궁금해졌다.
winston git issue에 검색해보니 color error는 라이브러리 문제가 아닌 vscode 사용으로 인한 것이었다.
그래서 색상 관련 코드는 주석 처리하고, log extention을 설치, 설정했다.

1. Log File Highlighter를 Extentions tap에서 검색해 설치한다.

2. ctrl+shift+p를 누르고 Preferences: Open User Settings(JSON) 검색

vscode를 개인에 맞게 설정해주는 파일인데, JSON 형식이기에 필요한 설정을 key:value로 추가해주면된다.

  
"logFileHighlighter.customPatterns": [
    {
      "pattern": "error",
      "foreground": "#ff0000"
    },
    {
      "pattern": "info",
      "foreground": "#1d63b3"
    }
  ],
  "editor.tokenColorCustomizations": {
    "textMateRules": [
      {
        "scope": "log.error",
        "settings": {
          "foreground": "#af1f1f",
          "fontStyle": "bold"
        }
      },
      {
        "scope": "log.warning",
        "settings": {
          "foreground": "#f4ad42",
          "fontStyle": ""
        }
      }
    ]
  }

적용하면 이모티콘(?)이 사라지고 색상이 추가된다.🐵


0개의 댓글