diff --git a/.changeset/fair-lemons-beam.md b/.changeset/fair-lemons-beam.md new file mode 100644 index 000000000..9f7305b56 --- /dev/null +++ b/.changeset/fair-lemons-beam.md @@ -0,0 +1,6 @@ +--- +'@verdaccio/logger-prettify': minor +'@verdaccio/logger': patch +--- + +hydrate template placeholders in log messages when format is set to 'json' diff --git a/packages/logger-prettify/src/index.ts b/packages/logger-prettify/src/index.ts index 37ae40e80..efbc0ec09 100644 --- a/packages/logger-prettify/src/index.ts +++ b/packages/logger-prettify/src/index.ts @@ -1,6 +1,8 @@ -import { printMessage } from './formatter'; +import { fillInMsgTemplate, printMessage } from './formatter'; import { PrettyOptionsExtended } from './types'; +export { fillInMsgTemplate }; + export type PrettyFactory = (param) => string; /* @@ -8,11 +10,11 @@ export type PrettyFactory = (param) => string; { messageKey: 'msg', levelFirst: true, prettyStamp: false } */ -module.exports = function prettyFactory(options: PrettyOptionsExtended): PrettyFactory { +export default function prettyFactory(options: PrettyOptionsExtended): PrettyFactory { // the break line must happens in the prettify component const breakLike = '\n'; return (inputData): string => { // FIXME: review colors by default is true return printMessage(inputData, options, true) + breakLike; }; -}; +} diff --git a/packages/logger/src/logger.ts b/packages/logger/src/logger.ts index 3d8b9b0e6..787ef5f7f 100644 --- a/packages/logger/src/logger.ts +++ b/packages/logger/src/logger.ts @@ -3,6 +3,7 @@ import _ from 'lodash'; import pino from 'pino'; import { warningUtils } from '@verdaccio/core'; +import prettifier, { fillInMsgTemplate } from '@verdaccio/logger-prettify'; const debug = buildDebug('verdaccio:logger'); @@ -53,6 +54,7 @@ export function createLogger( // pretty logs are not allowed in production for performance reasons if ((format === DEFAULT_LOG_FORMAT || format !== 'json') && isProd() === false) { pinoConfig = Object.assign({}, pinoConfig, { + prettifier, // more info // https://github.com/pinojs/pino-pretty/issues/37 prettyPrint: { @@ -60,7 +62,23 @@ export function createLogger( prettyStamp: format === 'pretty-timestamped', ...prettyPrintOptions, }, - prettifier: require('@verdaccio/logger-prettify'), + }); + } else { + pinoConfig = Object.assign({}, pinoConfig, { + // more info + // https://github.com/pinojs/pino/blob/v7.1.0/docs/api.md#hooks-object + hooks: { + logMethod(inputArgs, method) { + const [templateObject, message, ...otherArgs] = inputArgs; + const templateVars = + !!templateObject && typeof templateObject === 'object' + ? Object.getOwnPropertyNames(templateObject) + : []; + if (!message || !templateVars.length) return method.apply(this, inputArgs); + const hydratedMessage = fillInMsgTemplate(message, templateObject, false); + return method.apply(this, [templateObject, hydratedMessage, ...otherArgs]); + }, + }, }); } const logger = pino(pinoConfig, destination);