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

@americanexpress/lumberjack

v1.2.0

Published

Lumberjack is a minimal, configurable Console with utilities.

Downloads

15

Readme

npm Health Check

lumberjack is a minimal and configurable Console with utilities.

👩‍💻 Hiring 👨‍💻

Want to get paid for your contributions to lumberjack?

Send your resume to [email protected]

📖 Table of Contents

✨ Features

  • minimal and configurable Console with utilities.
  • Log formating using formatter depending on the log level.
  • Invoke callback functions before and after writing to stream.
  • Replace global console object using lumberjack

🤹‍ Usage

Installation

npm i @americanexpress/lumberjack

Invocation

How to use Lumberjack

Read more about this in the Lumberjack API section.

import Lumberjack from '@americanexpress/lumberjack';

function createLogger(simple = true) {
  return new Lumberjack({
    formatter: simple
      // your formatter function can be as simple as:
      ? (level, ...args) => `${level}: ${args}`
      // or can be more complex, like stringifying as JSON:
      : (level, ...messages) => JSON.stringify(
        {
          level,
          messages,
          time: new Date().toISOString(),
        },
        null,
        2
      ),
  });
}

const logger = createLogger();

logger.error(new Error('sample error'));
logger.warn("you're gonna have a bad time");
logger.info('%d', 42);
logger.log({ its: 'complicated' });
logger.dir(document.location); // lists properties of an object
logger.table(['apples', 'oranges', 'bananas']); // expects array

How to use monkeypatches

Read more about this in the monkeypatches API section.

import Lumberjack, { monkeypatches } from '@americanexpress/lumberjack';

const logger = new Lumberjack();

monkeypatches.replaceGlobalConsole(logger);

console.log('This is now invoking logger.log');

🎛️ API

Lumberjack

Creating a new console/Lumberjack is similar to creating a new nodejs Console, but slightly different:

  • pass a single object with named options
const logger = new Lumberjack({
  // options are added here
});

Options are:

  • stdout: stream to write to, defaults to process.stdout
  • stderr: defaults to the stdout option
  • formatter: an optional function that gets the log level and raw input arguments to return a string that is written to the stream (either stdout or stderr depending on log level)
    • defaults to util.format (nodejs Console's formatter)
    • can return null to skip writing to the stream
  • beforeWrite: callback function invoked before writing to the stream
  • afterWrite: callback function invoked after writing to the stream

The Lumberjack instance has four methods: error, warn, info, and log.

monkeypatches

A monkey patch is a way for a program to extend or modify supporting system software locally (affecting only the running instance of the program).

https://en.wikipedia.org/wiki/Monkey_patch

Use monkeypatches with care and be aware of pitfalls.

replaceGlobalConsole

Replaces the error, warn, info, and log methods on the global console object with those of the logger argument provided.

import Lumberjack, { monkeypatches } from '@americanexpress/lumberjack';

const logger = new Lumberjack();

monkeypatches.replaceGlobalConsole(logger);

console.log('This is now invoking logger.log');

attachSpy

Spy on invocations of methods, ex: on native packages.

Arguments:

  • object the method exists on
  • method name to spy on
  • spy function, receives
    • an array of the original arguments
    • a function to invoke the original method and get the return value, this will be invoked automatically if not done by the spy function

See also attachHttpRequestSpy and attachHttpsRequestSpy

import { monkeypatches } from '@americanexpress/lumberjack';

monkeypatches.attachSpy(http, 'request', (args, callOriginal) => {
  console.log('starting http request', args);
  const returnValue = callOriginal(); // spy, not an interceptor, so args handled automatically
  console.log('http request started', returnValue);
});

attachHttpRequestSpy

Spy on the beginning and end of an http.request.

Arguments:

  • spy for the invocation of http.request
  • spy for the close of the socket used in the http.request

Both spies receive the return value of http.request and a normalized parsed URL requested (via url.parse).

import { monkeypatches } from '@americanexpress/lumberjack';

monkeypatches.attachHttpRequestSpy(
  (clientRequest, parsedUrl) => console.info(`started request to ${parsedUrl.href}`),
  (clientRequest, parsedUrl) => console.info(`request to ${parsedUrl.href} finished`)
);

attachHttpsRequestSpy

The same thing as attachHttpRequestSpy but for the https native package.

Note that for nodejs versions before 6.0.0 and earlier https.request called http.request so adding spys for both http and https will result in both spies being called.

🏆 Contributing

We welcome Your interest in the American Express Open Source Community on Github. Any Contributor to any Open Source Project managed by the American Express Open Source Community must accept and sign an Agreement indicating agreement to the terms below. Except for the rights granted in this Agreement to American Express and to recipients of software distributed by American Express, You reserve all right, title, and interest, if any, in and to Your Contributions. Please fill out the Agreement.

Please feel free to open pull requests and see CONTRIBUTING.md to learn how to get started contributing.

🗝️ License

Any contributions made under this project will be governed by the Apache License 2.0.

🗣️ Code of Conduct

This project adheres to the American Express Community Guidelines. By participating, you are expected to honor these guidelines.