A basic handler for [pino](https://github.com/pinojs/pino) logs that sends batches to a desired endpoint via HTTP or HTTPS.

Usage no npm install needed!

<script type="module">
  import agungkesPinoHttpSend from 'https://cdn.skypack.dev/@agungkes/pino-http-send';



A basic handler for pino logs that sends batches to a desired endpoint via HTTP or HTTPS.

npm Travis (.org) David

Pre v1 is subject to breaking changes on minor version change.


$ npm i pino-http-send


$ pino-http-send --help
pino-http-send [options]

  --method, -m
             [string] [choices: "POST", "PUT", "PATCH", "GET"] [default: "POST"]
  --bodyType, -b   type of body to send
                          [string] [choices: "json", "ndjson"] [default: "json"]
  --url            url to send logs to                       [string] [required]
  --batchSize, -s  how many logs to send at a time        [number] [default: 10]
  --timeout, -t    timeout (in ms) to send logs in bucket that are not filled
                                                        [number] [default: 5000]

Basic Auth
  --username, -u  basic auth username                                   [string]
  --password, -p  basic auth password                                   [string]

  --retries, -r   number of retries to do if failure       [number] [default: 5]
  --interval, -i  interval (in ms) to retry sending if failure
                                                        [number] [default: 1000]

  --help        Show help                                              [boolean]
  --version     Show version number                                    [boolean]
  --log, -l     log to console as well                [boolean] [default: false]
  --silent      silence pino-http-send logs for failures and retries
                                                      [boolean] [default: false]
  --config, -c  path to json config                                     [string]

Environment Variables

All options can be defined in the environment and are prefixed with PINO_HTTP_SEND_. All camel-cased options are parsed with delimiters of _.

e.g. The option batchSize as an env var would be PINO_HTTP_SEND_BATCH_SIZE.



$ node . | pino-http-send --url=http://localhost:8080

You can also do https...

$ node . | pino-http-send --url=https://myserver.com:8080

Body Type

  • ndjson - New-line delimited JSON. See ndjson
  • json - Standard JSON sending of data. Logs are sent in the format of
      "logs": [...logs]


Currently only basic auth is implemented for the CLI usage. For header usage, you can see the API usage.


You can also use this module as a pino destination.

This will use the same batching function like the CLI usage. If the batch length is not reached within a certain time (timeout), it will auto "flush".


The options passed to this follow the same values as the CLI defined above.

Property Type Required/Default
url string REQUIRED
log boolean false
silent boolean false
method string "POST"
bodyType string "json"
username string
password string
headers Record<string,string>
batchSize number 10
retries number 5
interval number 1000
timeout number 5000
config string
import { createWriteStream } from 'pino-http-send';

const stream = createWriteStream({
  url: 'http://localhost:8080',

const logger = pino(
    level: 'info',

logger.info('test log!');