node package manager




Prettifies ndjson or bole logs from budo, wzrd and other tools.

Example with budo, which uses this under the hood.


npm install garnish [-g|--save-dev]



Pipe a ndjson emitter into garnish like so:

node app.js | garnish [opts]
    --level, -l    the minimum debug level, default 'debug'
    --name, -n     the default app name

Where level can be debug, info, warn, error.



Returns a duplexer that parses input as ndjson, and writes a pretty-printed result. Options:

  • level (String)
    • the minimum log level to print (default 'debug')
    • the order is as follows: debug, info, warn, error
  • name (String)
    • the default name for your logger; a message's name field will not be printed when it matches this default name, to reduce redundant/obvious information in the logs.


Typically, you would use bole or ndjson to write the content to garnish. You can also write ndjson to stdout like so:

// a log message 
  name: 'myApp',
  level: 'warn',
  message: 'not found'
// a typical server message 
  name: 'myApp',
  type: 'generated',
  level: 'info',
  url: '/foo.png',
  statusCode: 200,
  contentLength: 12800, // in bytes 
  elapsed: 120 // in milliseconds 

Currently garnish styles the following:

  • level
    • the log level e.g. debug, info, warn, error (default debug) - only shown if message is present
  • name
    • an optional event or application name. It's recommended to always have a name.
  • message
    • an event message.
  • url
    • a url (stripped to pathname), useful for router logging.
  • statusCode
    • an HTTP statusCode. Codes >=400 are displayed in red.
  • contentLength
    • the response size; if a number, bytes are assumed
  • elapsed
    • time elapsed since the previous related event; if a number, milliseconds are assumed
  • type
    • the type of event logged
  • colors
    • an optional color mapping for custom styles

You can use the colors field to override any of the default colors with a new ANSI style.

For example, the following will print elapsed in yellow if it passes our threshold:

function logTime (msg) {
  var now =
  var time = now - lastTime
  lastTime = now
    name: 'app',
    message: msg,
    elapsed: time + ' ms',
    colors: {
      elapsed: time > 1000 ? 'yellow' : 'green'

See Also


MIT, see for details.