1 | (function (root, factory) {
|
2 | if (typeof define === 'function' && define.amd) {
|
3 | define(factory);
|
4 | } else if (typeof module === 'object' && module.exports) {
|
5 | module.exports = factory();
|
6 | } else {
|
7 | root.prefix = factory(root);
|
8 | }
|
9 | }(this, function (root) {
|
10 | 'use strict';
|
11 |
|
12 | var merge = function (target) {
|
13 | var i = 1;
|
14 | var length = arguments.length;
|
15 | var key;
|
16 | for (; i < length; i++) {
|
17 | for (key in arguments[i]) {
|
18 | if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
|
19 | target[key] = arguments[i][key];
|
20 | }
|
21 | }
|
22 | }
|
23 | return target;
|
24 | };
|
25 |
|
26 | var defaults = {
|
27 | template: '[%t] %l:',
|
28 | levelFormatter: function (level) {
|
29 | return level.toUpperCase();
|
30 | },
|
31 | nameFormatter: function (name) {
|
32 | return name || 'root';
|
33 | },
|
34 | timestampFormatter: function (date) {
|
35 | return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
|
36 | },
|
37 | format: undefined
|
38 | };
|
39 |
|
40 | var loglevel;
|
41 | var configs = {};
|
42 |
|
43 | var reg = function (rootLogger) {
|
44 | if (!rootLogger || !rootLogger.getLogger) {
|
45 | throw new TypeError('Argument is not a root logger');
|
46 | }
|
47 | loglevel = rootLogger;
|
48 | };
|
49 |
|
50 | var apply = function (logger, config) {
|
51 | if (!logger || !logger.setLevel) {
|
52 | throw new TypeError('Argument is not a logger');
|
53 | }
|
54 |
|
55 |
|
56 | var originalFactory = logger.methodFactory;
|
57 | var name = logger.name || '';
|
58 | var parent = configs[name] || configs[''] || defaults;
|
59 |
|
60 |
|
61 | function methodFactory(methodName, logLevel, loggerName) {
|
62 | var originalMethod = originalFactory(methodName, logLevel, loggerName);
|
63 | var options = configs[loggerName] || configs[''];
|
64 |
|
65 | var hasTimestamp = options.template.indexOf('%t') !== -1;
|
66 | var hasLevel = options.template.indexOf('%l') !== -1;
|
67 | var hasName = options.template.indexOf('%n') !== -1;
|
68 |
|
69 | return function () {
|
70 | var content = '';
|
71 |
|
72 | var length = arguments.length;
|
73 | var args = Array(length);
|
74 | var key = 0;
|
75 | for (; key < length; key++) {
|
76 | args[key] = arguments[key];
|
77 | }
|
78 |
|
79 |
|
80 | if (name || !configs[loggerName]) {
|
81 |
|
82 | var timestamp = options.timestampFormatter(new Date());
|
83 | var level = options.levelFormatter(methodName);
|
84 | var lname = options.nameFormatter(loggerName);
|
85 |
|
86 |
|
87 | if (options.format) {
|
88 | content += options.format(level, lname, timestamp);
|
89 | } else {
|
90 | content += options.template;
|
91 | if (hasTimestamp) {
|
92 | content = content.replace(/%t/, timestamp);
|
93 | }
|
94 | if (hasLevel) content = content.replace(/%l/, level);
|
95 | if (hasName) content = content.replace(/%n/, lname);
|
96 | }
|
97 |
|
98 | if (args.length && typeof args[0] === 'string') {
|
99 |
|
100 | args[0] = content + ' ' + args[0];
|
101 | } else {
|
102 | args.unshift(content);
|
103 | }
|
104 | }
|
105 |
|
106 | originalMethod.apply(undefined, args);
|
107 | };
|
108 | }
|
109 |
|
110 | if (!configs[name]) {
|
111 | logger.methodFactory = methodFactory;
|
112 | }
|
113 |
|
114 |
|
115 | config = config || {};
|
116 | if (config.template) config.format = undefined;
|
117 |
|
118 | configs[name] = merge({}, parent, config);
|
119 |
|
120 | logger.setLevel(logger.getLevel());
|
121 |
|
122 | if (!loglevel) {
|
123 | logger.warn(
|
124 | 'It is necessary to call the function reg() of loglevel-plugin-prefix before calling apply. From the next release, it will throw an error. See more: https://github.com/kutuluk/loglevel-plugin-prefix/blob/master/README.md'
|
125 | );
|
126 | }
|
127 |
|
128 | return logger;
|
129 | };
|
130 |
|
131 | var api = {
|
132 | reg: reg,
|
133 | apply: apply
|
134 | };
|
135 |
|
136 | var save;
|
137 |
|
138 | if (root) {
|
139 | save = root.prefix;
|
140 | api.noConflict = function () {
|
141 | if (root.prefix === api) {
|
142 | root.prefix = save;
|
143 | }
|
144 | return api;
|
145 | };
|
146 | }
|
147 |
|
148 | return api;
|
149 | }));
|