index.js
1.83 KB
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
74
75
76
77
78
79
80
'use strict';
/* global window: true */
/* eslint-disable
no-shadow,
no-param-reassign,
space-before-function-paren
*/
const uuid = require('uuid/v4');
const colors = require('ansi-colors');
const loglevel = require('./loglevel');
const symbols = {
trace: colors.grey('₸'),
debug: colors.cyan('➤'),
info: colors.blue(colors.symbols.info),
warn: colors.yellow(colors.symbols.warning),
error: colors.red(colors.symbols.cross)
};
const defaults = {
name: '<unknown>',
level: 'info',
unique: true
};
const prefix = {
level (options) {
return symbols[options.level];
},
template: `{{level}} ${colors.gray('「{{name}}」')}: `
};
function log (options) {
const opts = Object.assign({}, defaults, options);
const { id } = options;
opts.prefix = Object.assign({}, prefix, options.prefix);
delete opts.id;
Object.defineProperty(opts, 'id', {
get() {
if (!id) {
return this.name + (opts.unique ? `-${uuid()}` : '');
}
return id;
}
});
if (opts.timestamp) {
opts.prefix.template = `[{{time}}] ${opts.prefix.template}`;
}
const log = loglevel.getLogger(opts);
if (!Object.prototype.hasOwnProperty.call(log, 'id')) {
Object.defineProperty(log, 'id', {
get() {
return opts.id;
}
});
}
return log;
}
module.exports = log;
// NOTE: this is exported so that consumers of webpack-log can use the same
// version of ansi-colors to decorate log messages without incurring additional
// dependency overhead
module.exports.colors = colors;
// NOTE: This is an undocumented function solely for the purpose of tests.
// Do not use this method in production code. Using in production code
// may result in strange behavior.
module.exports.delLogger = function delLogger(name) {
delete loglevel.loggers[name];
};
module.exports.factories = loglevel.factories;