What is loglevel-plugin-prefix?
The loglevel-plugin-prefix npm package is a plugin for the loglevel logging library that allows you to add customizable prefixes to your log messages. This can be useful for adding context to your logs, such as timestamps, log levels, or custom tags.
What are loglevel-plugin-prefix's main functionalities?
Basic Prefixing
This feature allows you to add a basic prefix to your log messages. By default, it adds the log level as a prefix.
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
prefix.apply(log);
log.info('This is an info message');
Custom Prefix Format
This feature allows you to customize the format of the prefix. You can include a timestamp, log level, and logger name in the prefix.
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
prefix.apply(log, {
template: '[%t] %l (%n):',
timestampFormatter: date => date.toISOString(),
levelFormatter: level => level.toUpperCase(),
nameFormatter: name => name || 'global'
});
log.info('This is an info message');
Custom Prefix Function
This feature allows you to define a custom function to format the prefix. This gives you complete control over how the prefix is generated.
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
prefix.apply(log, {
format(level, name, timestamp) {
return `${timestamp} [${level}] ${name}:`;
}
});
log.info('This is an info message');
Other packages similar to loglevel-plugin-prefix
winston
Winston is a versatile logging library for Node.js that supports multiple transports, custom formats, and log levels. It offers more advanced features compared to loglevel-plugin-prefix, such as log rotation and integration with various logging services.
bunyan
Bunyan is another logging library for Node.js that provides a JSON-based logging format. It includes features like log levels, serializers, and streams. Bunyan is more focused on structured logging compared to the prefixing capabilities of loglevel-plugin-prefix.
pino
Pino is a fast and low-overhead logging library for Node.js. It supports JSON logging, log levels, and custom serializers. Pino is designed for performance and is more lightweight compared to loglevel-plugin-prefix.
loglevel-plugin-prefix
Plugin for loglevel message prefixing.
Installation
npm i loglevel-plugin-prefix --save
API
This plugin is under active development and should be considered as an unstable. No guarantees regarding API stability are made. Backward compatibility is guaranteed only by path releases.
apply(logger, options)
This method applies the plugin to the logger.
logger - loglevel logger
options - configuration object
var defaults = {
template: '[%t] %l:',
timestampFormatter: function (date) {
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
},
levelFormatter: function (level) {
return level.toUpperCase();
},
nameFormatter: function (name) {
return 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
Alternatively, you can use format option. This is a function with two arguments (level and logger), which should return a prefix string. For example,
function simpleFormat(level, logger) {
return level + " (" + logger + "):";
}
If the format function is present, the other options are ignored.
Usage
Browser directly
<script src="https://unpkg.com/loglevel/dist/loglevel.min.js"></script>
<script src="https://unpkg.com/loglevel-plugin-prefix@^0.7/dist/loglevel-plugin-prefix.min.js"></script>
<script>
var logger = log.noConflict();
var prefixer = prefix.noConflict();
prefixer.apply(logger);
logger.warn('prefixed message');
</script>
Output
[16:53:46] WARN: prefixed message
ES6
import log from 'loglevel';
import prefix from 'loglevel-plugin-prefix';
prefix.apply(log);
log.warn('prefixed message');
CommonJS
var log = require('loglevel');
var prefix = require('loglevel-plugin-prefix');
prefix.apply(log);
log.warn('prefixed message');
AMD
define(['loglevel', 'loglevel-plugin-prefix'], function(log, prefix) {
prefix.apply(log);
log.warn('prefixed message');
});
Custom options
var log = require('loglevel');
var prefix = require('loglevel-plugin-prefix');
prefix.apply(log, {
template: '[%t] %l (%n) static text:',
timestampFormatter: function (date) { return date.toISOString() },
levelFormatter: function (level) { return level.charAt(0).toUpperCase() + level.substr(1) },
nameFormatter: function (name) { return name || 'global' }
});
log.warn('prefixed message');
Output
[2017-05-29T12:53:46.000Z] Warn (global) static text: prefixed message
Example
var log = require('loglevel');
module.exports = function () {
log.warn('message from moduleA');
}
var log = require('loglevel');
var logger = log.getLogger('moduleB');
module.exports = function () {
logger.warn('message from moduleB');
}
var log = require('loglevel');
module.exports = function () {
var logger = log.getLogger('moduleC');
logger.warn('message from moduleC');
}
var log = require('loglevel');
var prefix = require('loglevel-plugin-prefix');
var a = require('./moduleA');
var b = require('./moduleB');
var c = require('./moduleC');
log.warn('message from root %s prefixing', 'before');
prefix.apply(log, { template: '[%t] %l (%n):' });
log.warn('message from root %s prefixing', 'after');
a();
b();
c();
prefix.apply(log, {
template: '[%t] %l:',
timestampFormatter: function (date) { return date.toISOString() }
});
log.warn('message from root after reapplying');
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
[2017-05-29T12:53:46.000Z] WARN: message from root after reapplying