'use strict'; const pino = require('pino'); const { req: requestSerializer, res: responseSerializer, err: errorSerializer } = pino.stdSerializers; module.exports = class Logger { constructor () { const { LOG_LEVEL, NODE_ENV } = process.env; const logLevelFromNodeEnv = NODE_ENV === 'test' ? 'fatal' : 'info'; const options = { base: null, // Do not bind hostname, pid and friends by default level: LOG_LEVEL || logLevelFromNodeEnv, serializers: { request: requestSerializer, response: responseSerializer, error: (error) => Array.isArray(error) ? error.map((err) => errorSerializer(err)) : [errorSerializer(error)] } }; const dest = pino.destination({ sync: false }); // stdout this._logger = pino(options, dest); } trace (...args) { this._logger.trace(...args); } debug (...args) { this._logger.debug(...args); } info (...args) { this._logger.info(...args); } warn (...args) { this._logger.warn(...args); } error (...args) { this._logger.error(...args); } fatal (...args) { this._logger.fatal(...args); } child (...args) { return this._logger.child(...args); } finish (callback) { return pino.final(this._logger, callback); } };