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:
pino 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
.--messageFormat
(-o
): Format output of message, e.g.{level} - {pid}
will output message:INFO - 1123
Default:false
--timestampKey
(-m
): 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 thedateformat
documentation.- The default format is
yyyy-mm-dd HH:MM:ss.l o
in UTC. - Require a
SYS:
prefix to translate time to the local system's timezone. A shortcutSYS:standard
to translate time toyyyy-mm-dd HH:MM:ss.l o
in system timezone.
- The default format is
--search
(-s
): Specify a search pattern according to jmespath.--ignore
(-i
): Ignore one or several keys: (-i time,hostname
)--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 specified
We 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
messageFormat: false // --messageFormat
timestampKey: 'time', // --timestampKey
translateTime: false, // --translateTime
search: 'foo == `bar`', // --search
ignore: 'pid,hostname' // --ignore,
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