美文网首页
轻量的记录格式化和输出组件

轻量的记录格式化和输出组件

作者: 平仄_pingze | 来源:发表于2018-03-15 21:03 被阅读10次

    功能

    1. 格式化、带颜色地打印输出到控制台。
    2. 格式化并输出到文件。

    优点

    1. 不用改动代码,直接替换console。
    2. 零依赖,直接引入代码。

    代码

    const util = require('util');
    
    const levels = ['log', 'info', 'warn', 'error'];
    
    const colorCodeMap = {
      red: 31,
      green: 32,
      yellow: 33,
      blue: 34,
      purple: 35,
      cyan: 36,
      gray: 37,
    };
    
    const levelColorMap = {
      info: 'green',
      warn: 'yellow',
      error: 'red',
    };
    
    function coloring(str, color) {
      const colorCode = colorCodeMap[color];
      return `\x1b[${colorCode}m${str}\x1b[0m`;
    }
    
    function getTimeString() {
      function pad(num, n) {
        num = ~~num;
        return Array((n - num.toString().length + 1)).join(0) + num;
      }
      const now = new Date();
      return `${pad(now.getHours(), 2)}:${pad(now.getMinutes(), 2)}:`
        + `${pad(now.getSeconds(), 2)}:${pad(now.getMilliseconds(), 3)}`;
    }
    
    module.exports = (options) => {
      options = options || { console: true };
      for (let level of levels) {
        global.console[level] = (...args) => {
          if (!options.console && !options.file) {
            return;
          }
          level = level === 'log' ? 'info' : level;
          const prefix = `[${getTimeString()}]`;
          const levelStr = `[${level.toUpperCase()}]`;
          const base = util.format.apply(null, args) + '\n';
          const color = levelColorMap[level];
          const output = coloring(prefix + levelStr + ' - ', color) + base;
          if (options.console) {
            process.stdout.write(output);
          }
          if (options.file) {
            require('fs').appendFile(options.file, prefix + levelStr + ' ' + base, 'utf-8', () => {});
          }
        };
      }
    };
    

    使用

    require('./logger')({ file: 'output.log' }); // 输出到console和文件
    require('./logger')(); // 只输出到console
    require('./logger')({ console: false }); // 不输出(用于生产环境)
    

    相关文章

      网友评论

          本文标题:轻量的记录格式化和输出组件

          本文链接:https://www.haomeiwen.com/subject/gulkqftx.html