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 🙏

© 2026 – Pkg Stats / Ryan Hefner

simple.logger

v2.0.1

Published

A Simple Logger

Readme

simple.logger

A simple logger for node.

2.0.0 released, a better viewport with colors!

  • Proper JSDoc for ts types.
  • Better object output.
  • Colored prefixes based on channels.

Screenshot

API

Constructor

const { Logger, FileLogger } = require('simple.logger');

const optionalOptions = {
  level: 'info',
  prefix: '',
  outStream: [process.stdout, process.stderr],
  showTime: true,
  shortTime: false,
  showChannel: true,
};
// Sample constructions.
const logger = new Logger(optionalOptions);
const prefixLogger = new Logger('LOG PREFIX');
const fileLogger1 = new FileLogger('./logs.log', optionalOptions);
const fileLogger2 = new FileLogger(['./stdout.log', './stderr.log'], optionalOptions);

Options

  • @typedef {Object} LoggerOptions - Constructor params for Logger.
  • @prop {string} [level='info'] - Log level <error|warn|info|log|debug|trace>.
  • @prop {string} [prefix=''] - Prefix on every logging message.
  • @prop {Object|Array} [outStream=[process.stdout, process.stderr]] - Output writable streams.
  • @prop {boolean} [showTime=true] - Toggle date and time display in message prefixes.
  • @prop {boolean} [shortTime=false] - Toggle date display in message prefixes.
  • @prop {boolean} [showChannel=ture] - Toggle logging channel display in message prefixes.
  • @prop {boolean} [colored=true] - Toggle colored style output.

Methods

logger.changeLogLevel(level = 'info')

This method can change logger's verbose level on the fly and returns the previous level before changed.

Message logging methods - All the following method will yield a message with a log prefix pertentially contains channel, timestamp and custom prefix.

logger.error([data][, ...args])

Same as console.error([data][, ...args]), with verbose level control.

logger.warn([data][, ...args]

Same as console.warn([data][, ...args]), with verbose level control.

logger.info([data][, ...args])

Same as console.info([data][, ...args]), with verbose level control.

logger.log([data][, ...args])

Same as console.log([data][, ...args]), with verbose level control.

logger.debug([data][, ...args])

Same as console.debug([data][, ...args]), with verbose level control.

logger.trace([message][, ...args])

Same as console.trace([message][, ...args]), with verbose level control.

logger.raw([data][, ...args])

Same as logger.info([data][, ...args]), with no log formatting.

Grouping and Indenting - The following method will indent context and helps organizing logs better.

group and groupEnd will indent the whole line including formatted prefixes.

logger.group(label = '', channel = 'info')

logger.groupEnd(channel = 'info')

enterBlock and exitBlock will only indent the context after formatted prefixes.

enterBlock(label, channel =info)

exitBlock(label, channel =info)

Sample

A quick sample is provided as example.js

License

Licensed under MIT.