얼음꽃의 일지

[NODE] Winston 사용 법 본문

잡다한 지식

[NODE] Winston 사용 법

얼음꽃 2024. 4. 16. 11:25
728x90

Winston 이란?

 

Node.js 에서 로깅을 위하 라이브러리라고 보시면됩니다. 물론, pm2에 있는 log를 보는 방식을 app.js 에서 인위적으로 바꾸는 법도 있지만, 이러한 라이브러리를 사용하게되면 다양한 설정 및 유연한 로깅 레벨을 제공하기에 좀 더 쉽고 이쁘게 기록,관리가 가능합니다.

 

Winston 사용법

 

npm install winston

const winston = require('winston');

// 사용자 정의된 로그 포맷 설정
const myFormat = winston.format.printf(({ level, message, timestamp }) => {
    return `${timestamp} [${level.toUpperCase()}]: ${message}`;
});

// Winston 로거 생성 및 설정
const logger = winston.createLogger({
    level: 'info', // 로깅 레벨 설정 (debug, info, warn, error)
    format: winston.format.combine(
        winston.format.timestamp(), // 타임스탬프 추가
        myFormat // 사용자 정의된 포맷 적용
    ),
    transports: [
        new winston.transports.Console() // 콘솔로 로그 출력 설정
    ]
});

// 로그 메시지 작성
logger.info('This is an informational message.');
logger.warn('This is a warning message.');
logger.error('This is an error message.');

 

단순히, 윈스턴의 기본 형태를 쓰는 방법도 있지만, 윈스턴에서 나만의 방식을 만들어서 하는 방법도 존재합니다.

 

추가로 여기서 chalk 라는 라이브러리를 쓰면 내가 원하는 색깔까지 지정하여 사용이 가능합니다.

 

const winston = require('winston');
const chalk = require('chalk');

// 사용자 정의된 로그 포맷 설정
const myFormat = winston.format.printf(({ level, message, timestamp }) => {
    let color = chalk.white; // 기본 색상 설정

    // 로그 레벨에 따른 색상 선택
    switch (level) {
        case 'info':
            color = chalk.green;
            break;
        case 'warn':
            color = chalk.yellow;
            break;
        case 'error':
            color = chalk.red;
            break;
        // 필요에 따라 다른 로그 레벨에 대한 색상을 추가할 수 있습니다.
    }

    // 색상이 적용된 로그 레벨 및 메시지
    return `${timestamp} ${color(`[${level.toUpperCase()}]`)}: ${message}`;
});

// Winston 로거 생성 및 설정
const logger = winston.createLogger({
    level: 'info', // 로깅 레벨 설정 (debug, info, warn, error)
    format: winston.format.combine(
        winston.format.timestamp(), // 타임스탬프 추가
        myFormat // 사용자 정의된 포맷 적용
    ),
    transports: [
        new winston.transports.Console() // 콘솔로 로그 출력 설정
    ]
});

// 로그 메시지 작성
logger.info('This is an informational message.');
logger.warn('This is a warning message.');
logger.error('This is an error message.');

 

이렇게 해서 라이브러리를 이용해 색깔 변화를 줄 수 있습니다. 만약, 추가적인 라이브러리를 사용하고싶지 않다면 winston에서 기본적으로 주어지는 방식으로 써도 됩니다.

 

const winston = require('winston');

// Winston 로거 생성 및 설정
const logger = winston.createLogger({
    level: 'info', // 로깅 레벨 설정 (debug, info, warn, error)
    format: winston.format.combine(
        winston.format.timestamp(), // 타임스탬프 추가
        winston.format.colorize(), // 로그 레벨에 따라 색상 적용
        winston.format.simple() // 간단한 포맷 사용
    ),
    transports: [
        new winston.transports.Console() // 콘솔로 로그 출력 설정
    ]
});

// 로그 메시지 작성
logger.info('This is an informational message.');
logger.warn('This is a warning message.');
logger.error('This is an error message.');

 

winston.format().colorize()를 사용하면 내장되어있는 방식으로 사용 할 수 있습니다.

728x90