Skip to content

blacha/pretty-json-log

Repository files navigation

Pretty Json Log (PJL)

Convert JSON log lines into simple pretty colored log output

Converts

{"pid":0,"time":"2019-11-03T00:48:55.623Z","hostname":"","level":30,"msg":"HTTPGet","v":0,"name":"cogview","firstChunk":0,"lastChunk":0,"chunkCount":1,"bytes":32768,"fetchRange":"bytes=0-32768"}
{"pid":0,"time":"2019-11-03T00:48:55.677Z","hostname":"","level":30,"msg":"HTTPGet","v":0,"name":"cogview","firstChunk":94,"lastChunk":95,"chunkCount":1,"bytes":32768,"fetchRange":"bytes=3080192-3145728"}

into

Example output

Example output OpenTelemetry

Install

npm i -g pretty-json-log

cat <log-file> | pjl 

Logs can be filtered using --level

cat <log-file> | pjl --level 20

OpenTelemetry Log options

Do not output Resources

cat <log-file> | pjl --ignore-resources

Basic log type

To be pretty printable the basic json line needs to have:

Either:

  1. A PinoJS log message
/** Base log object every log object should have at minimum these three keys */
export interface LogMessage extends Record<string, any> {
    /** Log level */
    level: number;
    /** Time stamp either a ISO8601 string, timestamp number in ms or a Date */
    time: number | string | Date;
    /** Log message */
    msg: string;
}
  1. A OpenTelemetry Log Message
export interface LogMessageOpenTelemetry {
    /** Timestamp in nanoseconds if a string, or ms if a number */
    Timestamp: number | string
    /** Message body */
    Body?: unknown;
    Resource?: Record<string, unknown>;
    Attributes?: Record<string, unknown>;
}