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

notalogger

v1.0.9

Published

A logger that is super extensible by middlewares. Does not log by default.

Downloads

17

Readme

Not a logger

This is a logger, that does not log by default.

It is super extendable through a simple middleware api.

General logger API

import logger from 'notalogger';

logger.createLogger() // creates a new Logger with an empty middleware stack
logger.trace(...) // logs to trace
logger.debug(...) // logs to debug
logger.info(...) // logs to info
logger.warn(...) // logs to warn
logger.error(...) // logs to error

logger.extend.addMiddleware(yourMiddleware) // adds a middleware to the middleware stack
logger.extend.addMiddlewares([yourMiddleware1, yourMiddleware2]) // appends a list of middlewares to the bottom of the middleware stack 
logger.extend.clearMiddlewares() // clears the middleware stack
logger.extend.getMiddlewares() // gets the list of middlewares
import {
    logger, // same as the default export
    predefined, // exports the predefined Middlewares
    Level, // an enum of all available log levels
    levelWeight, // an object that maps from levelstring to a weight. Error has the highest weight
    Messages, // The type description of the messages passed to the middlewares
    Nextfunction, // The type description of the "next" function to call the next middleware
    Middleware, // The type description of a middleware
} from 'notalogger';

Prepared Middlewares

Console logger

Let's create a logger with a console middleware:

import logger, { predefined } from 'notalogger';

logger.extend.addMiddleware(predefined.consoleDefault)

logger.info("info") // Logs: "info"

Prefixer

If you want to prepend your log outputs with a static string:

import logger, { predefined } from 'notalogger';

logger.extend.addMiddleware(predefined.prefixer('This is a prefix:'))
logger.extend.addMiddleware(predefined.consoleDefault)

logger.info("info") // Logs: "This is a prefix: info"

Levelfilter

If want to filter for levels:

import logger, { predefined, Level} from 'notalogger';

const levelFilter = new predefined.Levelfilter(Level.INFO)
logger.extend.addMiddleware(levelFilter.middleware)
logger.extend.addMiddleware(predefined.consoleDefault)

logger.info("info") // Logs: "info"
logger.debug("debug") // Does not log anything

levelFilter.setLevel(Level.DEBUG)

logger.info("info") // Logs: "info"
logger.debug("debug") // Logs: "debug"

Middleware functionality

Please keep in mind that the order of adding middlewares is important since it builds a middleware stack. Thus this logs This is a prefix: info:

import logger, { predefined } from 'notalogger';

logger.extend.addMiddleware(predefined.prefixer('This is a prefix:'))
logger.extend.addMiddleware(predefined.consoleDefault)

logger.info("info") // Logs: "This is a prefix: info"

and this logs nothing because the logging to console happens before prepending the prefix:

import logger, { predefined } from 'notalogger';

logger.extend.addMiddleware(predefined.consoleDefault)
logger.extend.addMiddleware(predefined.prefixer('This is a prefix:'))

logger.info("info") // Does not log anything

Writing your own middlewares

The default middleware function looks like this:

import logger, { predefined, Middleware, Level, Messages, Nextfunction } from 'notalogger';

const mid: Middleware = (loglevel: Level, messages: Messages, next: Nextfunction): void => {
    // do something here
    next(loglevel, messages) // next calls the next middleware in the stack
}

logger.extend.addMiddleware(mid)
logger.extend.addMiddleware(predefined.consoleDefault)

logger.info("info")