Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
loglevel-plugin-prefix
Advanced tools
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.
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');
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 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 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.
Plugin for loglevel message prefixing.
npm install loglevel-plugin-prefix
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.
reg(loglevel)
This method registers plugin for loglevel. This method must be called at least once before any call to the apply method. Repeated calls to this method are ignored.
loglevel
- the root logger, imported from loglevel module
apply(logger, options)
This method applies the plugin to the logger. Before using this method, the reg
method must be called, otherwise a warning will be logged. From the next release, the call apply before reg will throw an error.
logger
- any logger of loglevel
options
- an optional configuration object
var defaults = {
template: '[%t] %l:',
levelFormatter: function (level) {
return level.toUpperCase();
},
nameFormatter: function (name) {
return name || 'root';
},
timestampFormatter: function (date) {
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
},
format: undefined
};
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:
%l
- level of message%n
- name of logger%t
- timestamp of messageThe levelFormatter
, nameFormatter
and timestampFormatter
is a functions for formatting corresponding values.
Alternatively, you can use format
option. This is a function that receives formatted values (level, name, timestamp) and should returns a prefix string.
If both format
and template
are present in the configuration, the template
parameter is ignored. When both these parameters are missing in the configuration, the inherited behavior is used.
<script src="https://unpkg.com/loglevel/dist/loglevel.min.js"></script>
<script src="https://unpkg.com/loglevel-plugin-prefix@^0.8/dist/loglevel-plugin-prefix.min.js"></script>
<script>
var logger = log.noConflict();
var prefixer = prefix.noConflict();
prefixer.reg(logger);
prefixer.apply(logger);
logger.warn('prefixed message');
</script>
Output
[16:53:46] WARN: prefixed message
const chalk = require('chalk');
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
const colors = {
TRACE: chalk.magenta,
DEBUG: chalk.cyan,
INFO: chalk.blue,
WARN: chalk.yellow,
ERROR: chalk.red,
};
prefix.reg(log);
log.enableAll();
prefix.apply(log, {
format(level, name, timestamp) {
return `${chalk.gray(`[${timestamp}]`)} ${colors[level.toUpperCase()](level)} ${chalk.green(`${name}:`)}`;
},
});
prefix.apply(log.getLogger('critical'), {
format(level, name, timestamp) {
return chalk.red.bold(`[${timestamp}] ${level} ${name}:`);
},
});
log.trace('trace');
log.debug('debug');
log.getLogger('critical').info('Something significant happened');
log.log('log');
log.info('info');
log.warn('warn');
log.error('error');
Output
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
prefix.reg(log);
log.enableAll();
prefix.apply(log, {
template: '[%t] %l (%n) static text:',
levelFormatter(level) {
return level.toUpperCase();
},
nameFormatter(name) {
return name || 'global';
},
timestampFormatter(date) {
return date.toISOString();
},
});
log.info('%s prefix', 'template');
const fn = (level, name, timestamp) => `[${timestamp}] ${level} (${name}) static text:`;
prefix.apply(log, { format: fn });
log.info('%s prefix', 'functional');
prefix.apply(log, { template: '[%t] %l (%n) static text:' });
log.info('again %s prefix', 'template');
Output
[2017-05-29T12:53:46.000Z] INFO (global) static text: template prefix
[2017-05-29T12:53:46.000Z] INFO (global) static text: functional prefix
[2017-05-29T12:53:46.000Z] INFO (global) static text: again template prefix
const log = require('loglevel');
const prefix = require('loglevel-plugin-prefix');
prefix.reg(log);
log.enableAll();
log.info('root');
const chicken = log.getLogger('chicken');
chicken.info('chicken');
prefix.apply(chicken, { template: '%l (%n):' });
chicken.info('chicken');
prefix.apply(log);
log.info('root');
const egg = log.getLogger('egg');
egg.info('egg');
const fn = (level, name) => `${level} (${name}):`;
prefix.apply(egg, { format: fn });
egg.info('egg');
prefix.apply(egg, {
levelFormatter(level) {
return level.toLowerCase();
},
});
egg.info('egg');
chicken.info('chicken');
log.info('root');
Output
root
chicken
INFO (chicken): chicken
[16:53:46] INFO: root
[16:53:46] INFO: egg
INFO (egg): egg
info (egg): egg
INFO (chicken): chicken
[16:53:46] INFO: root
FAQs
Plugin for loglevel message prefixing
The npm package loglevel-plugin-prefix receives a total of 1,394,864 weekly downloads. As such, loglevel-plugin-prefix popularity was classified as popular.
We found that loglevel-plugin-prefix demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.