aboutsummaryrefslogtreecommitdiff
path: root/lib/formatters/token.js
blob: f3afba206fd8c862a4777796a522633b1bbf6289 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Module(Cobalt.Formatter, 'Token')({
  formatString : "{{message}}",
  replaceRule : /{{(.*?)}}/g,
  separatorLength : 60,
  isoDate : true,
  separatorType : "-",
  format : function (logObject, opts){
    var indent, indentSize,
        separatorLength, separatorType,
        output, property;
    indentSize = logObject._indentLevel || 0;

    // Extend opts
    if (opts) {
      for (property in opts) {
        if (opts.hasOwnProperty(property)) {
          this[property] = opts[property];
        }
      }
    }

    indent = Array(indentSize + 1).join(' ');

    if (logObject._separator) {
      separatorLength = logObject._separatorLength || this.separatorLength;
      separatorType = logObject._separatorType || this.separatorType;
      output = indent + Array(separatorLength - indentSize + 1).join(separatorType);
    } else {
      output = indent + this.parseFormatString(logObject, this.formatString);
    }

    if (this.ansiColor) {
      output = this.colorize(logObject._level, output);
    }

    return output;
  },

  parseFormatString : function (logObject, formatString) {
    var resultString = '';
    if (typeof formatString === 'undefined') {
      formatString = this.formatString;
    }

    resultString = formatString.replace(this.replaceRule, function(match, paren){
      var date;
      if (paren === "_timestamp" && this.isoDate) {
        date = new Date(logObject[paren]);
        return date.toISOString();
      }
      return logObject[paren] || "-";
    }.bind(this));

    return resultString;
  },

  colorize : function (level, message) {
    switch(level) {
      case 0:
      case 1:
      case 2:
      case 3:
        return message.red;
      case 4:
        return message.yellow;
      case 5:
      case 6:
        return message.blue;
      default:
        return message;
    }
  }
});