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

fastify-log-controller

v1.1.0

Published

Control your application logs from your dashboard, at runtime

Downloads

9

Readme

fastify-log-controller

Build Status npm JavaScript Style Guide

Control your application logs from your dashboard, at runtime!

Install

npm i fastify-log-controller

Compatibility

| Plugin version | Fastify version | | ------------- |:---------------:| | ^1.0.0 | ^4.0.0 |

Usage

When you register this plugin, a new route will be available at /log-level (by default) that allows you to change the log level of your application at runtime!

You will be able to change the log level for every tracked encapsulated context!

This is useful when you want to change the log level of your application without restarting it and resetting what is in memory.

Let's see an example:

async function example () {
  const app = require('fastify')({
    logger: {
      level: 'error'
    }
  })

  // Register the plugin
  app.register(require('fastify-log-controller'))

  const routes = async function plugin (app, opts) {
    app.get('/', async function handler (request, reply) {
      request.log.info('hello world')
      return { hello: 'world' }
    })
  }

  // Create an encapsulated context with register and set the `logCtrl` option
  app.register(routes, {
    logCtrl: { name: 'bar' }
  })

  // Check that the route doesn't log anything because the application log level is `error`
  await app.inject('/')

  // Change the log level of the `bar` context to `debug`
  await app.inject({
    method: 'POST',
    url: '/log-level',
    body: {
      level: 'debug',
      contextName: 'bar'
    }
  })

  // Check that the route logs the `hello world` message!
  await app.inject('/')
}

example()

Note that it works with custom logger levels too!

If the exposeGet configuration option is set to true, the same route allows you to recover available contexts and currently set log levels:

$ curl http://localhost:3000/log-level
[{"contextName":"bar","level":"debug"}]

and the '/log-level/levels' route allows you to recover available log levels:

$ curl http://localhost:3000/log-level/levels
["trace","debug","info","warn","error","fatal"]

If you want to go deeper into the encapsulated context concept, you can read these sources:

Known limitations

In fastify you can voluntarily set log level for every encapsulated context and route, but you can't change it at runtime.
In these cases, the log level of the encapsulated context will be preserved.

Plugin log level

app.register(async function plugin (app) {
  // The log level will be always `fatal`
}, {
  logLevel: 'fatal',
  logCtrl: { name: 'bar' }
})

Route log level

app.register(async function plugin (app) {
  app.get('/bar', {
    logLevel: 'debug',
    handler: (request, reply) => {
      // Here the log level will be always `debug`
      return {}
    }
  })
  
  app.get('/bar', {
    handler: (request, reply) => {
      // Here the log level can be changed at runtime!
      return {}
    }
  })
}, { logCtrl: { name: 'foo' } })

Options

You can pass some options to the plugin:

app.register(require('fastify-log-controller'), {
  // How you want to call the option in the encapsulated context
  optionKey: 'logCtrl',

  // Enable get routes
  exposeGet: false,

  // Enhance the route config of the log controller route
  // It is not possible to change the handler and the schema
  routeConfig: {
    // Any option accepted by fastify route:
    // https://www.fastify.io/docs/latest/Reference/Routes/#routes-options
  }
})

Remember that you must pass the same optionKey to the encapsulated context:

app.register(routes, {
  logCtrl: { name: 'bar' }
})

License

Copyright Manuel Spigolon, Licensed under MIT.