1 | var emojis = {
|
2 | debug: '🐛',
|
3 | info: '✨',
|
4 | warn: '⚠️',
|
5 | error: '🚨',
|
6 | fatal: '💀'
|
7 | }
|
8 |
|
9 | var levels = {
|
10 | debug: 20,
|
11 | info: 30,
|
12 | warn: 40,
|
13 | error: 50,
|
14 | fatal: 60
|
15 | }
|
16 |
|
17 | var colors = {
|
18 | foreground: '#d3c0c8',
|
19 | background: '#2d2d2d',
|
20 | black: '#2d2d2d',
|
21 | red: '#f2777a',
|
22 | green: '#99cc99',
|
23 | yellow: '#ffcc66',
|
24 | blue: '#6699cc',
|
25 | magenta: '#cc99cc',
|
26 | cyan: '#66cccc',
|
27 | white: '#d3d0c8',
|
28 | brightBlack: '#747369'
|
29 | }
|
30 |
|
31 | module.exports = Nanologger
|
32 |
|
33 | function Nanologger (name) {
|
34 | if (!(this instanceof Nanologger)) return new Nanologger(name)
|
35 |
|
36 | this._name = name || ''
|
37 |
|
38 | try {
|
39 | this.logLevel = window.localStorage.getItem('logLevel') || 'info'
|
40 | } catch (e) {
|
41 | this.logLevel = 'info'
|
42 | }
|
43 |
|
44 | this._logLevel = levels[this.logLevel]
|
45 | }
|
46 |
|
47 | Nanologger.prototype.debug = function () {
|
48 | var args = [ 'debug' ]
|
49 | for (var i = 0, len = arguments.length; i < len; i++) args.push(arguments[i])
|
50 | this._print.apply(this, args)
|
51 | }
|
52 |
|
53 | Nanologger.prototype.info = function () {
|
54 | var args = [ 'info' ]
|
55 | for (var i = 0, len = arguments.length; i < len; i++) args.push(arguments[i])
|
56 | this._print.apply(this, args)
|
57 | }
|
58 |
|
59 | Nanologger.prototype.warn = function () {
|
60 | var args = [ 'warn' ]
|
61 | for (var i = 0, len = arguments.length; i < len; i++) args.push(arguments[i])
|
62 | this._print.apply(this, args)
|
63 | }
|
64 |
|
65 | Nanologger.prototype.error = function () {
|
66 | var args = [ 'error' ]
|
67 | for (var i = 0, len = arguments.length; i < len; i++) args.push(arguments[i])
|
68 | this._print.apply(this, args)
|
69 | }
|
70 |
|
71 | Nanologger.prototype.fatal = function () {
|
72 | var args = [ 'fatal' ]
|
73 | for (var i = 0, len = arguments.length; i < len; i++) args.push(arguments[i])
|
74 | this._print.apply(this, args)
|
75 | }
|
76 |
|
77 | Nanologger.prototype._print = function (level) {
|
78 | if (levels[level] < this._logLevel) return
|
79 |
|
80 | var time = getTimeStamp()
|
81 | var emoji = emojis[level]
|
82 | var name = this._name || 'unknown'
|
83 |
|
84 | var msgColor = (level === 'error' || level.fatal)
|
85 | ? colors.red
|
86 | : level === 'warn'
|
87 | ? colors.yellow
|
88 | : colors.green
|
89 |
|
90 | var objs = []
|
91 | var args = [ null ]
|
92 | var msg = '%c%s ' + emoji + ' %c%s'
|
93 |
|
94 | args.push(color(colors.brightBlack), time)
|
95 | args.push(color(colors.magenta), name)
|
96 |
|
97 | for (var i = 1, len = arguments.length; i < len; i++) {
|
98 | var arg = arguments[i]
|
99 | if (typeof arg === 'string') {
|
100 | if (i === 1) {
|
101 |
|
102 | msg += ' %c%s'
|
103 | args.push(color(msgColor))
|
104 | args.push(arg)
|
105 | } else if (/ms$/.test(arg)) {
|
106 |
|
107 | msg += ' %c%s'
|
108 | args.push(color(colors.brightBlack))
|
109 | args.push(arg)
|
110 | } else {
|
111 |
|
112 | msg += ' %c%s'
|
113 | args.push(color(colors.white))
|
114 | args.push(arg)
|
115 | }
|
116 | } else if (typeof arg === 'number') {
|
117 | msg += ' %c%d'
|
118 | args.push(color(colors.magenta))
|
119 | args.push(arg)
|
120 | } else {
|
121 | objs.push(arg)
|
122 | }
|
123 | }
|
124 |
|
125 | args[0] = msg
|
126 | objs.forEach(function (obj) {
|
127 | args.push(obj)
|
128 | })
|
129 |
|
130 | console.log.apply(console, args)
|
131 | }
|
132 |
|
133 | function color (color) {
|
134 | return 'color: ' + color + ';'
|
135 | }
|
136 |
|
137 | function getTimeStamp () {
|
138 | var date = new Date()
|
139 | var hours = pad(date.getHours().toString())
|
140 | var minutes = pad(date.getMinutes().toString())
|
141 | var seconds = pad(date.getSeconds().toString())
|
142 | return hours + ':' + minutes + ':' + seconds
|
143 | }
|
144 |
|
145 | function pad (str) {
|
146 | return str.length !== 2 ? 0 + str : str
|
147 | }
|