npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

pino-socket

v7.3.0

Published

A pino 'transport' for writing to a tcp, udp, or unix socket

Downloads

26,158

Readme

pino-socket

npm version Build Status js-standard-style

Lead maintainer: jsumners

This module provides a "transport" for pino that simply forwards messages to an arbitrary socket. The socket can be UDPv4 or TCPv4. The module can echo the received logs or work silently.

You should install pino-socket globally for ease of use:

$ npm install --production -g pino-socket

Usage as Pino Transport

You can use this module as a pino transport like so:

const pino = require('pino')
const transport = pino.transport({
  target: 'pino-socket',
  options: {
    address: '10.10.10.5',
    port: 5000,
    mode: 'tcp'
  }
})
pino(transport)

Options

| Name | Description | |---------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | address | The host address to connect to. Default: 127.0.0.1. | | port | The host port to connect to. Default: 514. | | unixsocket | The unix socket path for the destination. Default: ​. | | mode | Either tcp or udp. Default: udp. | | secure | Enable secure (TLS) connection. Default: false. | | noverify | Allow connection to server with self-signed certificates. Default: false. | | reconnect | Enable reconnecting to dropped TCP destinations. Default: false. | | reconnectTries | Number of times to attempt reconnection before giving up. Default: Infinity. | | backoffStrategy | The backoff strategy to use on TCP destinations. The backoff strategy must implement the BackoffStrategy interface. lternatively, you can configure the backoff strategy using primitive data (see below). Default: new FibonacciStrategy(). | | backoffStrategy.name | The backoff strategy name, either exponential or fibonacci. Default: fibonacci. | | backoffStrategy.randomisationFactor | The backoff randomisation factor, must be between 0 and 1. Default: 0. | | backoffStrategy.initialDelay | The backoff initial delay in milliseconds. Default: 100. | | backoffStrategy.maxDelay | The backoff maximum delay in milliseconds. Default: 10000. | | backoffStrategy.factor | The exponential backoff factor, must be greater than 1. Default: 2. | | recovery | Enable a recovery mode when the TCP connection is lost which store data in a memory queue (FIFO) until the queue max size is reached or the TCP connection is restored. Default: false. | | recoveryQueueMaxSize | The maximum size of items added to the queue. When reached, oldest items "First In" will be evicted to stay below this size. Default: 1024. | | recoveryQueueSizeCalculation | Function used to calculate the size of stored items. The item is passed as the first argument and contains a data (Buffer) and encoding (String) attribute. Default: (item) => item.data.length + item.encoding.length. | | onBeforeDataWrite | Function used to manipulate TCP data before being written to the socket. Operations preformed here must be synchronous. Format: (data) => Buffer. Default: null |

Events

| Name | Callback Signature | Description | |--------------------|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | open | (address: AddressInfo) => void | Emitted when the TCP or UDP connection is established. | | socketError | (error: Error) => void | Emitted when an error occurs on the TCP or UDP socket. The socket won't be closed. | | socketClose | (error: Error|null) => void | Emitted after the TCP socket is closed. The argument error is defined if the socket was closed due to a transmission error. | | close | (hadError: Boolean) => void | Emitted after the TCP or UDP socket is closed and won't reconnect. The argument hadError is a boolean which says if the socket was closed due to a transmission error. | | reconnectFailure | (error: Error|undefined) => void | Emitted when the maximum number of backoffs (i.e., reconnect tries) is reached on a TCP connection. |

IMPORTANT: In version prior to 6.0, an error event was emitted on the writable stream when an error occurs on the TCP or UDP socket. In other words, it was not possible to write data to the writable stream after an error occurs on the TCP or UDP socket. If you want to restore the previous behavior you can do:

transport.on('socketError', () => {
  transport.end()
})

Alternatively, you can propagate the socket error using:

transport.on('socketError', (err) => {
  transport.emit('error', err)
})

In this case, make sure that you are listening to the error event otherwise you will get an Uncaught Error.

Usage as Pino Legacy Transport

Pino supports a legacy transport interface that is still supported by this module. Given an application foo that logs via pino, and a system that collects logs on port UDP 5000 on IP 10.10.10.5, you would use pino-socket like so:

$ node foo | pino-socket -a 10.10.10.5 -p 5000

OR

$ node foo | pino-socket -u /tmp/unix.sock

CLI Options

  • --settings (-s): read settings from a JSON file (switches take precedence).
  • --unixsocket (-u): the unix socket path for the destination. Default: ​.
  • --address (-a): the address for the destination socket. Default: 127.0.0.1.
  • --port (-p): the port for the destination socket. Default: 514.
  • --mode (-m): either tcp or udp. Default: udp.
  • --secure (-tls): enable secure (TLS) connection for TCP (only works with --mode=tcp).
  • --noverify (-nv): allow connection to server with self-signed certificates (only works with --secure).
  • --reconnect (-r): enable reconnecting to dropped TCP destinations. Default: off.
  • --reconnectTries <n> (-t <n>): set number (<n>) of reconnect attempts before giving up. Default: infinite.
  • --echo (-e): echo the received messages to stdout. Default: enabled.
  • --no-echo (-ne): disable echoing received messages to stdout.
  • --recovery: enable recovery mode for TCP (only works with --mode=tcp). Default: off.
  • --recovery-queue-max-size <n>: maximum size of items (<n>) added to the recovery queue. Default: 1024.
  • --max-udp-packet-size: maximum size of udp packet; Default: unlimited.

Settings JSON File

The --settings switch can be used to specify a JSON file that contains a hash of settings for the application. A full settings file is:

{
  "address": "127.0.0.1",
  "port": 514,
  "mode": "tcp",
  "secure": false,
  "noverify": false,
  "reconnect": true,
  "reconnectTries": 20,
  "echo": false
}

Note that command line switches take precedence over settings in a settings file. For example, given the settings file:

{
  "address": "10.0.0.5",
  "port": 514
}

And the command line:

$ yes | pino-socket -s ./settings.json -p 1514

The connection will be made to address 10.0.0.5 on UDP port 1514.

License

MIT License