UNPKG

pino-sanitize

Version:

Formats pino messages removing UUIDs, HASHES and Query String

81 lines (69 loc) 1.81 kB
#! /usr/bin/env node 'use strict'; const split = require('split2'); const pump = require('pump'); const args = require('args'); const through = require('through2'); const { sanitizeQueryString, sanitizeHash, sanitizeUUID } = require('./lib/utils'); args .option(['u', 'uuid'], 'Filter log removing UUID (defaults to `false`)') .option(['h', 'hash'], 'Filter log removing HASH (defaults to `false`)') .option(['q', 'qs'], 'Filter log removing Query String (defaults to `false`)') .option( ['k', 'keys'], 'Define which keys should be sanitized (defaults to `err,error,msg,message`)', 'err,msg', ); const sanitize = (log, opts) => { let sanitizedLog = ''; if (opts.qs) { sanitizedLog = sanitizeQueryString(log, opts.qs); } if (opts.uuid) { sanitizedLog = sanitizeUUID(sanitizedLog, opts.uuid); } if (opts.hash) { sanitizedLog = sanitizeHash(sanitizedLog, opts.hash); } return sanitizedLog; }; const logLevelTransformer = through.obj((chunk, enc, cb) => { const opts = Object.assign( {}, { qs: false, q: false, h: false, hash: false, u: false, uuid: false, k: 'err,msg', keys: 'err,msg,stack', }, args.parse(process.argv), ); if (typeof chunk === 'string' || typeof chunk !== 'object') { console.log(sanitize(chunk, opts)); cb(); return; } const keys = opts.keys.split(','); for (const key of keys) { if (chunk.hasOwnProperty(key)) { chunk[key] = sanitize(chunk[key], opts); } } console.log(JSON.stringify(chunk)); cb(); }); function tryParseJSON(s) { try { return JSON.parse(s); } catch (e) { if (e.name === 'SyntaxError') { return s; } throw e; } } pump(process.stdin, split(tryParseJSON), logLevelTransformer);