In essence, asynchronous logging enables the minimum overhead of Pino. Asynchronous logging works by buffering log messages and writing them in larger chunks.
const pino = require('pino')
const logger = pino(pino.destination({
dest: './my-file', // omit for stdout
minLength: 4096, // Buffer before writing
sync: false // Asynchronous logging
}))
It's always possible to turn on synchronous logging by passing sync: true
.
In this mode of operation log messages are directly written to the
output stream, as the messages are generated with a blocking operation.
- See
pino.destination
pino.destination
is implemented onsonic-boom
⇗.
Asynchronous logging is disabled by default on AWS Lambda, or any other environment
that modifies process.stdout
. If forcefully turned on, we recommend to call dest.flushSync()
at the end
of each function execution to avoid losing data.
Asynchronous logging has a couple of important caveats:
- As opposed to the default mode, there is not a one-to-one relationship between
calls to logging methods (e.g.
logger.info
) and writes to a log file - There is a possibility of the most recently buffered log messages being lost in case of a system failure, e.g. a power cut.
See also: