npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

logtify

v1.1.3

Published

Logger based on the Chain of Responsibility pattern

Downloads

9

Readme

Logtify

CircleCI

Dev Tips

Installing the module

npm i -S logtify

Configuration

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

Minimal

const { logger } = require('logtify')();

Configuration via object

// 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
});

Add new subscriber

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

Add adapter

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.

Logger usage:

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');

Stream Usage:

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

Message format

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.

Default logLevel priority:

  • silly -> 0
  • verbose -> 1
  • debug -> 2
  • info -> 3
  • warn -> 4
  • error -> 5

Adding your own subscriber

Please refer to Dev Tips for more information on the topic

Prefixing

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}

Presets

To make it easier to config the logger, some presets are available:

  • dial-once - enables Console subscriber when NODE_ENV is neither staging or production and disables it otherwise. Also includes jsonify option.
const { stream, logger } = require('logtify')({ presets: ['dial-once'] });
  • no-prefix - disables the prefix from the message
  • prefix - enables the prefix in the message
  • jsonify - 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']
});

Existing subscribers: