본문 바로가기
프로그래밍/Node.js

winston 로거 만들기

by 뽀도 2024. 4. 30.

 

'use strict'

const winston = require('winston');
/*const winstonDaily = require('winston-daily-rotate-file');*/          // 데일리 로그 사용시
const fs = require('fs');
const path = require('path');


/**
 * 게임 패킷 로거
 * @type {gamePacketLogger}
 */
const gamePacketLogger = class {
    constructor(_serverName, _seq) {
        //  로그 남길 서버 이름
        this.servername = _serverName;

        // 경로 설정
        this.dir = path.join(path.dirname(__dirname), '/gamePacketLog/');
        if (fs.existsSync(this.dir) == false) {
            fs.mkdirSync(this.dir);
        }

        this.createFileName = `${_seq}-${this.servername}`;

        this.logger = this.getLogger();
    }

    // 디버그 로그 출력
    debug(_message) {
        this.logger.debug(_message);
    }

    // 에러 로그 출력
    error(_message) {
        this.logger.error(_message);
    }

    // 로거 호출
    getLogger() {
        return new winston.createLogger({
            level: 'debug',
            format: winston.format.printf(({level, message}) => {
                return `${message}`;
            }),
            transports: [
                new winston.transports.File({
                    level: 'debug',
                    maxsize: 1024 * 10000,
                    maxFiles: 100000,
                    filename: `${this.dir}${this.servername}_log_${this.createFileName}.txt`,
                })
            ],
            exceptionHandlers: [
                new winston.transports.File({
                    filename: `${this.dir}${this.servername}_error_${this.createFileName}.txt`,
                    maxsize: 1024 * 10000,
                    maxFiles: 100000,
                    level: 'error',
                    showLevel: true,
                }),
            ],
            exitOnError: false
        });
    }
}

module.exports = gamePacketLogger;
반응형

댓글