UNPKG

3.38 kBJavaScriptView Raw
1var emojis = {
2 debug: '🐛',
3 info: '✨',
4 warn: '⚠️',
5 error: '🚨',
6 fatal: '💀'
7}
8
9var levels = {
10 debug: 20,
11 info: 30,
12 warn: 40,
13 error: 50,
14 fatal: 60
15}
16
17var 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
31module.exports = Nanologger
32
33function 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
47Nanologger.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
53Nanologger.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
59Nanologger.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
65Nanologger.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
71Nanologger.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
77Nanologger.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 // first string argument is in color
102 msg += ' %c%s'
103 args.push(color(msgColor))
104 args.push(arg)
105 } else if (/ms$/.test(arg)) {
106 // arguments finishing with 'ms', grey out
107 msg += ' %c%s'
108 args.push(color(colors.brightBlack))
109 args.push(arg)
110 } else {
111 // normal colors
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
133function color (color) {
134 return 'color: ' + color + ';'
135}
136
137function 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
145function pad (str) {
146 return str.length !== 2 ? 0 + str : str
147}