Narcoleptic Possum Mob

    pino-tiny
    TypeScript icon, indicating that this package has built-in type declarations

    2.1.3 • Public • Published

    pino-tiny

    a tiny little log formatter for pino.

    yeah, i know, pino-colada...

    ...but is does some weird black box stuff, and i did not like some of the formatting, and i was generally not too happy about certain things, so...

    i made pino-tiny!

    screen-shot

    using it

    pino-tiny is ran like any other pino output mangler, you run it as a process and pipe to it. first you need to install it. it's really not meant to be a production log formatter, so prolly install it in your project as a dev-dependency.

    npm i -D pino-tiny
    --or--
    yarn add --dev pino-tiny

    ...run it with your application that is already using pino to log stuff...

    $ node index.js | pino-tiny

    CLI Arguments

    Now you can tweak the output a bit with command line arguments

    Options:
          --help            Show help                                      
          --version         Show version number                            
      -i, --hide-icons      Hide level emoji icons.       
      -l, --hide-letters    Hide level letters.           
      -t, --hide-timestamp  Hide the timestamp.           
      -c, --hide-colors     Remove ansi colors from output.
      -w, --hide-web        Hide web stats.               
      -m, --msg-key         The key to use for message from the JSON log data.                                               
    

    ...or put it in your package.json file...

    {
      ...
      "scripts": {
        "dev": "nodemon index.js | pino-tiny",
        ...
      }
    }

    use it in code!

    pino-tiny can be used in code too as a prettifier, if you want. here is how you set it up:

    const { PinoTinyPrettifier } = require('pino-pretty')
    const Pino = require('pino')
    
    const logger = new Pino({
      prettifier: PinoTinyPrettifier(/*{[options]}*/),
      prettyPrint: true
    })
    
    logger.trace('trace message')
    logger.debug('debug message')
    logger.info('info message')
    logger.warn('warn message')
    logger.error('error message')
    logger.fatal('fatal message')

    Prettifier Options

    The prettifier has the same options as the cli. Plus a filter function.

    PinoTinyOptions {
      hideIcons?: boolean
      hideLetters?: boolean
      hideTimestamp?: boolean
      hideColors?: boolean
      hideWeb?: boolean
      msgKey?: string
      filter?: (data: any) => any | undefined
    }

    The filter option allows you to filter and process the log data. So you can do something like

    // remove ansi colors and remove messages that have secrets.
    const logger = new Pino({
      prettifier: PinoTinyPrettifier(
        {
          hideColor: true,
          filter:(data) => {
            if (data.hasSecret) {
              return { ...data, msg:'*** secret ***' }
            } else {
              return data
            }
          }
        }
      ),
      prettyPrint: true
    })

    extensible-ish

    pino-tiny runs like a process you pipe the output of your application into and it makes nice output. it also exports a function Run that takes the filter option function as a parameter.

    this allows you to control if a log entry gets printed, and you can mangle the output (in the msg property of the log). here is a ridiculous example:

    const { Run } = require('pino-tiny')
    
    function filter (data) {
      if(data.msg.indexOf('happy') >= 0) { 
          // nothing happy gets out.
          return false; 
      } 
      else {
          // prepend msg with woah.
          return {
              ...data, 
              msg: `[woah!] ${data.msg}`
          } 
      } 
    }
    //start the logger
    Run(filter)

    what does pino-tiny do?

    • shows log level, 3 characters (and not a emoji icon), color coded, and ??? for custom log levels.
    • timestamps (no dates). you know what day it is but millisecond timestamps give you some performance output
    • strips all but the msg for output
    • if there is are res and req properties in the log data, it will put dimmed request and response info (method, url, status code).
    • non-json string data that get piped in (like nodemon) get treated as info logs and outputted.
    • does not swallow error messages
    • non-pino JSON will be logged as dimmed stringified JSON

    New in v2.0

    • programmatic prettifier
    • better colors
    • handle non-pino json
    • emojis! 🔎 🪲 ℹ️ ⚠️ 🔥 💣
    • src is now in typescript

    New in v2.1

    • added prettifier options
    • added prettifier options as cli args
    • added back the filter method in options
    • added back the extensibility

    Install

    npm i pino-tiny

    DownloadsWeekly Downloads

    47

    Version

    2.1.3

    License

    MIT

    Unpacked Size

    17.8 kB

    Total Files

    9

    Last publish

    Collaborators

    • holmok