UNPKG

5.53 kBMarkdownView Raw
1# loglevel-plugin-prefix
2Plugin for [loglevel](https://github.com/pimterry/loglevel) message prefixing
3
4## Installation
5
6```sh
7npm install loglevel-plugin-prefix --save
8```
9
10## API
11
12```javascript
13apply(log[, options]);
14```
15
16This method applies the plugin to the logger.
17
18**log** - root logger, imported from loglevel package
19
20**options** - configuration object
21
22```javascript
23var defaults = {
24 template: '[%t] %l:',
25 timestampFormatter: date => date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1'),
26 levelFormatter: level => level.toUpperCase(),
27 nameFormatter: name => name || 'root'
28}
29```
30
31Plugin formats the prefix using **template** option as a printf-like format.
32
33The **template** is a string containing zero or more placeholder tokens. Each placeholder token is replaced with the value from loglevel messages parameters. Supported placeholders are:
34
35- %t - timestamp of message
36- %l - level of message
37- %n - name of logger
38
39The **timestampFormatter**, **levelFormatter** and **nameFormatter** is a functions for formatting corresponding values
40
41```javascript
42disable();
43```
44
45This method cancels the effect of the plugin.
46
47## Base usage
48
49### Browser directly
50
51Download [production version](https://raw.githubusercontent.com/kutuluk/loglevel-plugin-prefix/master/dist/loglevel-plugin-prefix.min.js)
52and copy to your project folder
53```html
54<script src="loglevel.min.js"></script>
55<script src="loglevel-plugin-prefix.min.js"></script>
56
57<script>
58 var logger = log.noConflict();
59 var prefixer = prefix.noConflict();
60 prefixer.apply(logger);
61 logger.warn('prefixed message');
62</script>
63```
64
65Output
66```
67[16:53:46] WARN: prefixed message
68```
69
70### ES6
71```javascript
72import log from 'loglevel';
73import prefix from 'loglevel-plugin-prefix';
74
75prefix.apply(log);
76log.warn('prefixed message');
77```
78
79### CommonJS
80```javascript
81var log = require('loglevel');
82var prefix = require('loglevel-plugin-prefix');
83
84prefix.apply(log);
85log.warn('prefixed message');
86```
87
88### AMD
89```javascript
90define(['loglevel', 'loglevel-plugin-prefix'], function(log, prefix) {
91 prefix.apply(log);
92 log.warn('prefixed message');
93});
94```
95
96## Custom options
97
98```javascript
99var log = require('loglevel');
100var prefix = require('loglevel-plugin-prefix');
101
102prefix.apply(log, {
103 template: '[%t] %l (%n) static text:',
104 timestampFormatter: function (date) { return date.toISOString() },
105 levelFormatter: function (level) { return level.charAt(0).toUpperCase() + level.substr(1) },
106 nameFormatter: function (name) { return name || 'global' }
107});
108
109log.warn('prefixed message');
110```
111
112Output
113```
114[2017-05-29T12:53:46.000Z] Warn (global) static text: prefixed message
115```
116
117## Example
118
119```javascript
120// moduleA.js
121var log = require('loglevel');
122
123module.exports = function () {
124 log.warn('message from moduleA');
125}
126```
127
128```javascript
129// moduleB.js
130var log = require('loglevel');
131
132var logger = log.getLogger('moduleB');
133
134module.exports = function () {
135 logger.warn('message from moduleB');
136}
137```
138
139```javascript
140// moduleC.js
141var log = require('loglevel');
142
143module.exports = function () {
144 var logger = log.getLogger('moduleC');
145 logger.warn('message from moduleC');
146}
147```
148
149```javascript
150// main.js
151var log = require('loglevel');
152var prefix = require('loglevel-plugin-prefix');
153
154var a = require('./moduleA');
155var b = require('./moduleB');
156var c = require('./moduleC');
157
158log.warn('message from root %s prefixing', 'before');
159
160prefix.apply(log, { template: '[%t] %l (%n):' });
161
162log.warn('message from root %s prefixing', 'after');
163
164a();
165b();
166c();
167
168prefix.apply(log, {
169 template: '[%t] %l:',
170 timestampFormatter: function (date) { return date.toISOString() }
171});
172
173log.warn('message from root after reapplying');
174
175prefix.disable();
176
177log.warn('message from root after disabling');
178```
179
180Output
181```
182message from root before prefixing
183[16:53:46] WARN (root): message from root after prefixing
184[16:53:46] WARN (root): message from moduleA
185message from moduleB
186[16:53:46] WARN (moduleC): message from moduleC
187[2017-05-29T12:53:46.000Z] WARN: message from root after reapplying
188message from root after disabling
189```
190
191## Errors
192
193```javascript
194var log = require('loglevel');
195var prefix = require('loglevel-plugin-prefix');
196var mock = require('loglevel-plugin-mock');
197
198log.enableAll();
199
200prefix.apply(log);
201log.info('message from root after prefixing');
202
203prefix.apply(log, { timestampFormatter: function (date) { return date.toISOString() } });
204log.info('message from root after pre-prefixing');
205
206mock.apply(log);
207
208try {
209 prefix.apply(log, { template: '[%t] %l (%n):' });
210} catch(e) {
211 log.error(e);
212};
213
214try {
215 prefix.disable();
216} catch(e) {
217 log.error(e);
218};
219
220mock.disable();
221
222var logger = log.getLogger('child');
223
224try {
225 prefix.apply(logger, { template: '[%t] %l (%n):' });
226} catch(e) {
227 logger.error(e);
228};
229
230logger.info('message from child logger');
231
232```
233
234Output
235```
236[16:53:46] INFO: message from root after prefixing
237[2017-05-29T12:53:46.000Z] INFO: message from root after pre-prefixing
238[2017-05-29T12:53:46.000Z] ERROR: You can't reassign a plugin after appling another plugin
239[2017-05-29T12:53:46.000Z] ERROR: You can't disable a plugin after appling another plugin
240[2017-05-29T12:53:46.000Z] ERROR: TypeError: Argument is not a root loglevel object
241[2017-05-29T12:53:46.000Z] INFO: message from child logger
242```