npm i -S logtify
Full list of env variables. Can be used in config object with the same name. Each of them is optional
LOG_TIMESTAMP = 'true'
LOG_ENVIRONMENT = 'true'
LOG_LEVEL = 'true'
LOG_REQID = 'true' // only included when provided with metadata
LOG_CALLER_PREFIX = 'true' // additional prefix with info about caller module/project/function
JSONIFY = 'true' // converts metadata to json
CONSOLE_LOGGING = 'true'
LOGENTRIES_LOGGING = 'true'
LOGSTASH_LOGGING = 'true'
BUGSNAG_LOGGING = 'true'
Environment variables have a higher priority over the settings object
const { logger } = require('logtify')();
// Note, that such settings will be passed to each subscriber:
const { logger } = require('logtify')({
CONSOLE_LOGGING: false, // switches off the console subscriber
MIN_LOG_LEVEL: 'info' // minimal message level to be logged
});
A subscriber is a small independent logger unit, whose job is to send logs to (ideally) one service/node.
By default, logtify contains only 1 subscriber - Console
.
However, you can add any of the following available subscribers
An adapter is a small plugin, meant to ease the usage of some subscriber.
If a subscriber provides an adapter, it will be exposed in the logtify instance
require('logtify-bugsnag')();
const { logger, notifier } = require('logtify')();
If you import he subscriber with adapter after you initialize the stream, you need to update the logtify reference, because adapter property will be undefined.
const { logger } = require('logtify')();
logger.silly('Hello world');
logger.verbose('Hello world');
logger.debug('Hello world');
logger.info('Hello world');
logger.warn('Hello world', { your: 'metadata' }, { at: 'the end' });
logger.error(new Error('Hello world'));
logger.log('info', 'Hello world');
logger.profile('label');
const { stream } = require('logtify')();
stream.log('warn', 'Hello world', { metadata: 'Something' });
// properties
stream.settings; // Object
stream.adapters; // Map
stream.subscribersCount; // Number
// classes
stream.Message; // Object
stream.Subscriber; // Object
Then provided data is converted into a message package object of the following structure:
// if text message
{
level: {'silly'|'verbose'|'debug'|'info'|'warn'|'error'},
text: {string},
meta: {
instanceId: {string},
... (other metadata provided in runtime)
}
}
Metadata object can be stringified to JSON with process.env.JSONIFY = 'true'
. Alternatively, you can do the same via configs object.
- silly -> 0
- verbose -> 1
- debug -> 2
- info -> 3
- warn -> 4
- error -> 5
Please refer to Dev Tips for more information on the topic
Subscribers may include prefixes into a message. For example
logger.info('Hello world');
will result in:
info: [2017-05-10T15:16:31.468Z:local:INFO:] Hello world instanceId={youtInstanceId}
You can enable/disable them with the following environment variables / parameters for the stream settings:
process.env.LOG_TIMESTAMP = 'true';
process.env.LOG_ENVIRONMENT = 'true';
process.env.LOG_LEVEL = 'true';
process.env.LOG_REQID = 'true';
process.env.LOG_CALLER_PREFIX = 'true';
LOG_CALLER_PREFIX
- enables/disables printing of additional prefix: [project:module:function]
with information about the caller project
Note! that if the LOG_REQID
is set to 'true'
, it will still not log it (as seen from example above), unless it is provided in the message.meta
.
So, to include it, you should do the following:
logger.info('Hello world', { reqId: 'something' });
And it will result in:
info: [2017-05-10T15:16:31.468Z:local:INFO:something] Hello world instanceId={yourInstanceId}
To make it easier to config the logger, some presets are available:
dial-once
- enables Console subscriber whenNODE_ENV
is neitherstaging
orproduction
and disables it otherwise. Also includesjsonify
option.
const { stream, logger } = require('logtify')({ presets: ['dial-once'] });
no-prefix
- disables the prefix from the messageprefix
- enables the prefix in the messagejsonify
- convert message metadata to JSON. By defaunt, object is flattened
Apply a preset by passing it to the stream configs:
const { stream, logger } = require('logtify')({
presets: ['dial-once', 'no-prefix']
});
- Console subscriber (part of this project)
- Logentries Subscriber
- Logstash Subscriber
- Bugsnag Subscriber