pino-transmit-http

A pino browser transmit that send log statements over HTTP

Usage no npm install needed!

<script type="module">
  import pinoTransmitHttp from 'https://cdn.skypack.dev/pino-transmit-http';
</script>

README

pino-transmit-http Build Status Coverage Status

ATTENTION: draft version, not yet released!

Lead maintainer: Sven Tschui

This is a browser transmit for the Pino logger that sends log statements created in a browser environment to a remote server using HTTP calls (XHR, fetch or sendBeacon depending on availability).

You can use it like so:

$ npm install pino pino-transmit-http
const pino = require('pino');
const pinoTransmitHttp = require('pino-transmit-http');

const logger = pino({
  browser: {
    trasmit: pinoTransmitHttp()
  }
})

logger.warn('hello pino')

A HTTP request will by default look like this

POST /log
Content-Type: application/json;charset=UTF-8

[{"ts":1531919330334,"messages":["hello pino"],"bindings":[],"level":{"label":"warn","value":40}}]

Options that can be passed to pinoTransmitHttp({ ... }):

key default description
throttle 500 Amount of milliseconds to throttle the transmission of the log messages. Note that trailing = true, leading = false is used. See lodash.throttle
debounce null Amount of milliseconds to debounce the transmission of the log messages. See lodash.debounce. If null then throttling is used
url '/log' location where to send logs
useSendBeacon true whether navigator.sendBeacon should be used on unload. Note that sendBeacon has various restriction. It operations on method POST only and can not send custom HTTP headers. content-type is always text/plain.
forceSendBeacon false The transmit will fallback to XHR or fetch when a HTTP method other than POST or custom http headers are used since this is not supported by sendBeacon. With forceSendBeacon you can disable the fallback and use sendBeacon anyway. Note that in this case the log calls made using sendBeacon are issued as HTTP POST and without any custom headers.
method 'POST' method to be used by XHR and fetch calls. Note that when you pass in a method other than POST, sendBeacon will not be used unless you pass forceSendBeacon.
headers { 'content-type': 'application/json;charset=UTF-8' } for XHR and fetch calls. Not supported for sendBeacon calls headers added to XHR and fetch calls. Note that when you pass in custom headers sendBeacon will not be used unless you pass forceSendBeacon.
fetch null fetch instance to be used instead of the global fetch variable