
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
@voiceflow/pino-pretty
Advanced tools
This module provides a basic ndjson formatter. If an incoming line looks like it could be a log line from an ndjson logger, in particular the Pino logging library, then it will apply extra formatting by considering things like the log level and timestamp.
A standard Pino log line like:
{"level":30,"time":1522431328992,"msg":"hello world","pid":42,"hostname":"foo","v":1}
Will format to:
[1522431328992] INFO (42 on foo): hello world
Using the example script from the Pino module, and specifying that logs should be colored and the time translated, we can see what the prettified logs will look like:

$ npm install -g pino-pretty
It's recommended to use pino-pretty with pino
by piping output to the CLI tool:
node app.js | pino-pretty
--colorize (-c): Adds terminal color escape sequences to the output.--crlf (-f): Appends carriage return and line feed, instead of just a line
feed, to the formatted log line.--errorProps (-e): When formatting an error object, display this list
of properties. The list should be a comma separated list of properties Default: ''.--levelFirst (-l): Display the log level name before the logged date and time.--errorLikeObjectKeys (-k): Define the log keys that are associated with
error like objects. Default: err,error.--messageKey (-m): Define the key that contains the main log message.
Default: msg.--levelKey (--levelKey): Define the key that contains the level of the log.
Default: level.--levelLabel (-b): Output the log level using the specified label.
Default: levelLabel.--messageFormat (-o): Format output of message, e.g. {levelLabel} - {pid} - url:{request.url} will output message: INFO - 1123 - url:localhost:3000/test
Default: false--timestampKey (-a): Define the key that contains the log timestamp.
Default: time.--translateTime (-t): Translate the epoch time value into a human readable
date and time string. This flag also can set the format string to apply when
translating the date to human readable format. For a list of available pattern
letters see the dateformat documentation.
yyyy-mm-dd HH:MM:ss.l o in UTC.SYS: prefix to translate time to the local system's timezone. A
shortcut SYS:standard to translate time to yyyy-mm-dd HH:MM:ss.l o in
system timezone.--search (-s): Specify a search pattern according to
jmespath.--ignore (-i): Ignore one or several keys: (-i time,hostname)--hideObject (-H): Hide objects from output (but not error object)--config: Specify a path to a config file containing the pino-pretty options. pino-pretty will attempt to read from a .pino-prettyrc in your current directory (process.cwd) if not specifiedWe recommend against using pino-pretty in production, and highly
recommend installing pino-pretty as a development dependency.
When installed, pino-pretty will be used by pino as the default
prettifier.
Install pino-pretty alongside pino and set the
prettyPrint option to true:
const pino = require('pino')
const logger = pino({
prettyPrint: true
})
logger.info('hi')
The prettyPrint option can also be an object containing pretty-print
options:
const pino = require('pino')
const logger = pino({
prettyPrint: { colorize: true }
})
logger.info('hi')
See the Options section for all possible options.
pino-pretty exports a factory function that can be used to format log strings.
This factory function is used internally by Pino, and accepts an options argument
with keys corresponding to the options described in CLI Arguments:
{
colorize: chalk.supportsColor, // --colorize
crlf: false, // --crlf
errorLikeObjectKeys: ['err', 'error'], // --errorLikeObjectKeys
errorProps: '', // --errorProps
levelFirst: false, // --levelFirst
messageKey: 'msg', // --messageKey
levelKey: 'level', // --levelKey
messageFormat: false // --messageFormat
timestampKey: 'time', // --timestampKey
translateTime: false, // --translateTime
search: 'foo == `bar`', // --search
ignore: 'pid,hostname', // --ignore,
hideObject: false // --hideObject
customPrettifiers: {}
}
The colorize default follows
chalk.supportsColor.
customPrettifiers option provides the ability to add a custom prettify function
for specific log properties. customPrettifiers is an object, where keys are
log properties which will be prettified and value is the prettify function itself.
For example, if a log line contains a query property,
you can specify a prettifier for it:
{
customPrettifiers: {
query: prettifyQuery
}
}
//...
const prettifyQuery = value => {
// do some prettify magic
}
MIT License
FAQs
Prettifier for Pino log lines
We found that @voiceflow/pino-pretty demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 27 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.