pino

🌲 super fast, all natural json logger

18,105 stars JavaScript Markdown Skills API Spec #fast#json#logger#nodejs
AI Prompts & Specs

Repository: pinojs/pino


Stars: 17673

README.md

!banner

pino


![npm version](https://www.npmjs.com/package/pino)
![Build Status](https://github.com/pinojs/pino/actions)
![js-standard-style](https://standardjs.com/)

Very low overhead JavaScript logger.

Documentation

* Benchmarks β‡—
* API β‡—
* Browser API β‡—
* Redaction β‡—
* Child Loggers β‡—
* Transports β‡—
* Diagnostics β‡—
* Web Frameworks β‡—
* Pretty Printing β‡—
* Asynchronous Logging β‡—
* Ecosystem β‡—
* Help β‡—
* Long Term Support Policy β‡—

Runtimes

Node.js

Pino is built to run on Node.js.

Bare

Pino works on Bare with the pino-bare compatability module.

Pear

Pino works on Pear, which is built on Bare, with the pino-bare compatibility module.


Install

Using NPM:

text
$ npm install pino

Using YARN:

text
$ yarn add pino

If you would like to install pino v6, refer to https://github.com/pinojs/pino/tree/v6.x.

Usage

js
const logger = require('pino')()

logger.info('hello world')

const child = logger.child({ a: 'property' })
child.info('hello child!')

This produces:

text
{"level":30,"time":1531171074631,"msg":"hello world","pid":657,"hostname":"Davids-MBP-3.fritz.box"}
{"level":30,"time":1531171082399,"msg":"hello child!","pid":657,"hostname":"Davids-MBP-3.fritz.box","a":"property"}

For using Pino with a web framework see:

* Pino with Fastify
* Pino with Express
* Pino with Hapi
* Pino with Restify
* Pino with Koa
* Pino with Node core http
* Pino with Nest
* Pino with Hono

<a name="essentials"></a>

Essentials

Development Formatting

The pino-pretty module can be used to
format logs during development:

!pretty demo

Transports & Log Processing

Due to Node's single-threaded event-loop, it's highly recommended that sending,
alert triggering, reformatting, and all forms of log processing
are conducted in a separate process or thread.

In Pino terminology, we call all log processors "transports" and recommend that the
transports be run in a worker thread using our pino.transport API.

For more details see our Transports⇗ document.

Low overhead

Using minimum resources for logging is very important. Log messages
tend to get added over time and this can lead to a throttling effect
on applications – such as reduced requests per second.

In many cases, Pino is over 5x faster than alternatives.

See the Benchmarks document for comparisons.

Bundling support

Pino supports being bundled using tools like webpack or esbuild.

See Bundling document for more information.

<a name="team"></a>

The Team

Matteo Collina

<https://github.com/mcollina>

<https://www.npmjs.com/~matteo.collina>

<https://twitter.com/matteocollina>

David Mark Clements

<https://github.com/davidmarkclements>

<https://www.npmjs.com/~davidmarkclements>

<https://twitter.com/davidmarkclem>

James Sumners

<https://github.com/jsumners>

<https://www.npmjs.com/~jsumners>

<https://twitter.com/jsumners79>

Thomas Watson Steen

<https://github.com/watson>

<https://www.npmjs.com/~watson>

<https://twitter.com/wa7son>

Contributing

Pino is an OPEN Open Source Project. This means that:

Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.

See the CONTRIBUTING.md file for more details.

<a name="acknowledgments"></a>

Acknowledgments

This project was kindly sponsored by nearForm.
This project is kindly sponsored by Platformatic.

Logo and identity designed by Cosmic Fox Design: https://www.behance.net/cosmicfox.

License

Licensed under MIT.

[elasticsearch]: https://www.elastic.co/products/elasticsearch
[kibana]: https://www.elastic.co/products/kibana