well-formatted, extendable pino logger for hapi.js
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


laabr logo

well-formatted, extendable pino logger for hapi.js

Booyah! Works like a charm.

Marcus Pöhls

Travis node npm standard npm Coverage Status

  1. Introduction
  2. Installation
  3. Usage
  4. API ⇗
  5. Tokens ⇗
  6. Formats ⇗
  7. Presets ⇗
  8. Example
  9. Developing and Testing
  10. Contribution


laabr is a well-formatted pino ⇗ logger for hapi.js ⇗ which is based on the plugin hapi-pino ⇗. It enables optionally to log in JSON for easy post-processing. It listens to various hapi.js events ⇗ and logs in a well-formatted manner. Therefor it is possible to define custom formats alike the morgan ⇗ ones or make use of available presets. Additionally it enables to define own tokens which could be used in custom formats.

The modules standard and ava are used to grant a high quality implementation.
This major release supports just hapi.js >=v17.0.0 and node >=v8.0.0 — to support older versions please use v2.4.1. laabr is the Swabian translation for talking.

laabr vs. hapi-pino

First of all laabr extends the hapi-pino plugin. So it is possible to use laabr in an almost identical manner like hapi-pino. This plugin provides further features which probably decelerates the logging a bit, but it should be faster than the alternatives anyway. The following features are provided:

  • Easy out of the box usage
  • Context-sensitive colorization
  • Customizable identation for JSON strings
  • Wide range of preset tokens ⇗ to extract and compose data as needed
  • Preset formats ⇗ combining useful tokens for an easy start
  • Possibility to add own format presets ⇗ for an easy reuse
  • Easily customizable tokens & formats
  • Override several console logging methods
  • In despite of everything it is possible to preformat ⇗ & postformat ⇗ data, e.g. to filter sensitive data

laabr screen


For installation use the Node Package Manager ⇗:

$ npm install --save laabr

or clone the repository:

$ git clone https://github.com/felixheck/laabr



First you have to import the module:

const laabr = require('laabr');

Create hapi server

Afterwards create your hapi server if not already done:

const hapi = require('hapi');
const server = hapi.server({
  port: 8888,
  host: 'localhost',


Finally register the plugin and set the correct options:

await server.register({
  plugin: laabr,
  options: {},


Take a look at several more examples ⇗.


const hapi = require('hapi');
const laabr = require('laabr');

const server = hapi.server({ port: 3000 });

const options = {
  formats: { onPostStart: ':time :start :level :message' },
  tokens: { start:  () => '[start]' },
  indent: 0

    method: '*',
    path: '/response',
    handler() {
      return 'hello world';
    method: 'GET',
    path: '/error',
    handler () {
      throw new Error('foobar');

(async () => {
  try {
    await server.register({
      plugin: laabr,
    await server.start();
    console.log('Server started successfully');
  } catch (err) {

server.log('info', 'did you mean "foobar"?');


// (1) `log`
$ {"message":"did you mean \"foobar\"?","timestamp":1499352305938,"level":"info"}

// (2) `onPostStart`
$ 1499352305956 [start] info server started

// (3) `response` – calling `/response`
$ 1499352307927 GET /response 200 {} (25 ms)

// (4) `request-error` & `response` – calling `/error`
$ {"error":"foobar","timestamp":1499352320071,"level":"warn"}
$ 1499352320072 GET /error 500 {} (3 ms)

// (5) `onPostStop` – Pressing `Ctrl + C`
$ 1499352325077 info server stopped

Developing and Testing

First you have to install all dependencies:

$ npm install

To execute all unit tests once, use:

$ npm test

or to run tests based on file watcher, use:

$ npm start

To get information about the test coverage, use:

$ npm run coverage


Fork this repository and push in your ideas.

Do not forget to add corresponding tests to keep up 100% test coverage.
For further information read the contributing guideline.