UNPKG

2.27 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 this._name = name || ''
36 try {
37 this.logLevel = window.localStorage.getItem('logLevel') || 'info'
38 } catch (e) {
39 this.logLevel = 'info'
40 }
41 this._logLevel = levels[this.logLevel]
42}
43
44Nanologger.prototype.debug = function (message, data) {
45 this._print('debug', message, data)
46}
47
48Nanologger.prototype.info = function (message, data) {
49 this._print('info', message, data)
50}
51
52Nanologger.prototype.warn = function (message, data) {
53 this._print('warn', message, data)
54}
55
56Nanologger.prototype.error = function (message, data) {
57 this._print('error', message, data)
58}
59
60Nanologger.prototype.fatal = function (message, data) {
61 this._print('fatal', message, data)
62}
63
64Nanologger.prototype._print = function (level, message, data) {
65 if (levels[level] < this._logLevel) return
66
67 data = data === undefined ? '' : data
68 data = data || ''
69 var time = this._getTimeStamp()
70 var emoji = emojis[level]
71 var name = this._name || 'unknown'
72 var c = this._c
73
74 var msgColor = (level === 'error' || level.fatal)
75 ? colors.red
76 : (level === 'warn')
77 ? colors.yellow
78 : colors.green
79
80 var msg = '%c' + time + ' ' + emoji + ' %c' + name + ' %c' + message
81 console.log(msg, c(colors.brightBlack), c(colors.magenta), c(msgColor), data)
82}
83
84Nanologger.prototype._c = function (color) {
85 return 'color: ' + color + ';'
86}
87
88Nanologger.prototype._getTimeStamp = function () {
89 var date = new Date()
90 var hours = this._pad(date.getHours().toString())
91 var minutes = this._pad(date.getMinutes().toString())
92 var seconds = this._pad(date.getSeconds().toString())
93 return hours + ':' + minutes + ':' + seconds
94}
95
96Nanologger.prototype._pad = function (str) {
97 return (str.length !== 2) ? '0' + str : str
98}