loglevel-prefix
Minimal lightweight (0.9KB minified and gzipped) plugin for loglevel message prefixing
Installation
npm install loglevel-prefix --save
API
prefix(log[, options]);
log - root logger, imported from loglevel package
options - configuration object
default_options = {
template: '[%t] %l:',
timestampFormatter: date => date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1'),
levelFormatter: level => level.toUpperCase(),
nameFormatter: name => name || 'root'
}
Plugin formats the prefix using template option as a printf-like format.
The 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:
%t - Timestamp of message.
%l - Level of message.
%n - Name of logger.
The timestampFormatter, levelFormatter and nameFormatter is a functions for formatting corresponding values
Base usage
Browser directly
Download production version
and copy to your project folder
<script src="loglevel.min.js"></script>
<script src="loglevel-prefix.min.js"></script>
<script>
prefix(log);
log.warn('prefixed message');
</script>
Output
[12:53:46] WARN: prefixed message
ES6
import log from 'loglevel';
import prefix from 'loglevel-prefix';
prefix(log);
log.warn('prefixed message');
CommonJS
var log = require('loglevel');
var prefix = require('loglevel-prefix');
prefix(log);
// or
// var log = require('loglevel-prefix')(require('loglevel'));
log.warn('prefixed message');
AMD
define(['loglevel', 'loglevel-prefix'], function(log, prefix) {
prefix(log);
log.warn('prefixed message');
});
Custom options
import log from 'loglevel';
import prefix from 'loglevel-prefix';
prefix(log, {
template: '[%t] %l (%n) static text:',
timestampFormatter: date => date.toISOString(),
levelFormatter: level => level.charAt(0).toUpperCase() + level.substr(1),
nameFormatter: name => name || 'global'
});
log.warn('prefixed message');
Output
[2017-05-29T16:53:46.000Z] Warn (global) static text: prefixed message
Example
// moduleA.js
import log from 'loglevel';
export default function () {
log.warn('message from moduleA');
}
// moduleB.js
import log from 'loglevel';
const logger = log.getLogger('moduleB');
export default function () {
logger.warn('message from moduleB');
}
// moduleC.js
import log from 'loglevel';
export default function () {
const logger = log.getLogger('moduleC');
logger.warn('message from moduleC');
}
// main.js
import log from 'loglevel';
import prefix from 'loglevel-prefix';
import a from './moduleA';
import b from './moduleB';
import c from './moduleC';
log.warn('message from root %s prefixing', 'before');
prefix(log, {
template: '[%t] %l (%n):',
});
log.warn('message from root %s prefixing', 'after');
a();
b();
c();
Output
message from root before prefixing
[16:53:46] WARN (root): message from root after prefixing
[16:53:46] WARN (root): message from moduleA
message from moduleB
[16:53:46] WARN (moduleC): message from moduleC
Errors
// main.js
import log from 'loglevel';
import prefix from 'loglevel-prefix';
log.setLevel('info');
prefix(log);
log.info('message from root after prefixing');
try {
prefix(log, {
timestampFormatter: date => date.toISOString()
});
} catch(e) {
log.error(e);
};
log.info('message from root after pre-prefixing');
const logger = log.getLogger('main');
try {
prefix(logger, {
template: '[%t] %l (%n):'
});
} catch(e) {
logger.error(e);
};
logger.info('message from child logger');
Output
[16:53:46] INFO: message from root after prefixing
[16:53:46] ERROR: TypeError: You can assign a prefix only one time
[16:53:46] INFO: message from root after pre-prefixing
[16:53:46] ERROR: TypeError: Argument is not a root loglevel object
[16:53:46] INFO: message from child logger