对 console.log 进行二次封装

181 阅读1分钟

介绍

对 console 进行封装

TS 版本

import moment from 'moment';

enum ELoggerLeave {
    error = 0,
    warn = 1,
    info = 2,
    debug = 3
}

interface ILoggerOptions {
    leave: keyof typeof ELoggerLeave;
}

class Logger {

    #leave: ELoggerLeave = ELoggerLeave.debug;

    constructor(opts: ILoggerOptions) {
        this.#leave = ELoggerLeave[opts.leave];
    }

    log(level: ELoggerLeave, message?: string, ...args: any[]) {
        if (ELoggerLeave[level] <= ELoggerLeave[this.#leave]) {
            switch (level) {
                case ELoggerLeave.error:
                    console.error(`[${ELoggerLeave[level].toUpperCase()}] ${moment().format('YYYY-MM-DD HH:mm:ss')} ${message}`, ...args);
                    break;
                case ELoggerLeave.warn:
                    console.warn(`[${ELoggerLeave[level].toUpperCase()}] ${moment().format('YYYY-MM-DD HH:mm:ss')} ${message}`, ...args);
                    break;
                case ELoggerLeave.info:
                    console.info(`[${ELoggerLeave[level].toUpperCase()}] ${moment().format('YYYY-MM-DD HH:mm:ss')} ${message}`, ...args);
                    break;
                case ELoggerLeave.debug:
                    console.debug(`[${ELoggerLeave[level].toUpperCase()}] ${moment().format('YYYY-MM-DD HH:mm:ss')} ${message}`, ...args);
                    break;
                default:
                    break;
            }
        }
    }


    debug(message?: string, ...args: any[]) {
        this.log(ELoggerLeave.debug, message, ...args);
    }

    info(message?: string, ...args: any[]) {
        this.log(ELoggerLeave.info, message, ...args);
    }

    warn(message?: string, ...args: any[]) {
        this.log(ELoggerLeave.warn, message, ...args);
    }

    error(message?: string, ...args: any[]) {
        this.log(ELoggerLeave.error, message, ...args);
    }
}

const logger = new Logger({ leave: 'debug' });
export default logger;

JS 版本

import moment from 'moment';

const ELoggerLeave = {
    error: 0,
    warn: 1,
    info: 2,
    debug: 3
};

class Logger {
    #leave = ELoggerLeave.debug;

    constructor(opts) {
        this.#leave = ELoggerLeave[opts.leave];
    }

    log(level, message, ...args) {
        if (level <= this.#leave) {
            switch (level) {
                case ELoggerLeave.error:
                    console.error(`[error] ${moment().format('YYYY-MM-DD HH:mm:ss')} ====> ${message}`, ...args);
                    break;
                case ELoggerLeave.warn:
                    console.warn(`[warn] ${moment().format('YYYY-MM-DD HH:mm:ss')} ====> ${message}`, ...args);
                    break;
                case ELoggerLeave.info:
                    console.info(`[info] ${moment().format('YYYY-MM-DD HH:mm:ss')} ====> ${message}`, ...args);
                    break;
                case ELoggerLeave.debug:
                    console.debug(`[debug] ${moment().format('YYYY-MM-DD HH:mm:ss')} ====> ${message}`, ...args);
                    break;
                default:
                    break;
            }
        }
    }

    debug(message, ...args) {
        this.log(ELoggerLeave.debug, message, ...args);
    }

    info(message, ...args) {
        this.log(ELoggerLeave.info, message, ...args);
    }

    warn(message, ...args) {
        this.log(ELoggerLeave.warn, message, ...args);
    }

    error(message, ...args) {
        this.log(ELoggerLeave.error, message, ...args);
    }
}

const logger = new Logger({ leave: 'debug' });
export default logger;