[Config] pinoWillSendConfig leads to configuration mutation
Closed this issue · 4 comments
nioc commented
Hello,
I just upgrade from pino 8.19.0 to 8.21.0 and my code encounter this error:
Error: Can not update runtime configuration property: "pinoWillSendConfig". Configuration objects are immutable unless ALLOW_CONFIG_MUTATIONS is set.
at Object.set (/home/nicolas/Dev/brewery/node_modules/config/lib/config.js:421:19)
at transport (/home/nicolas/Dev/brewery/node_modules/pino/lib/transport.js:114:30)
at normalizeArgs (/home/nicolas/Dev/brewery/node_modules/pino/lib/tools.js:316:16)
at pino (/home/nicolas/Dev/brewery/node_modules/pino/pino.js:90:28)
at createPinoLogger (/home/nicolas/Dev/brewery/node_modules/fastify/lib/logger.js:42:14)
at createLogger (/home/nicolas/Dev/brewery/node_modules/fastify/lib/logger.js:101:18)
at fastify (/home/nicolas/Dev/brewery/node_modules/fastify/fastify.js:135:33)
at exports.default (/home/nicolas/Dev/brewery/apps/server/src/api/index.ts:22:25)
Here is my code on src/api/index.ts:
import Fastify, { FastifyLoggerOptions } from 'fastify'
import { PinoLoggerOptions } from 'fastify/types/logger'
import config from 'config'
// ...
export default async () => {
const server = Fastify({
logger: config.get('api.logger') as PinoLoggerOptions | FastifyLoggerOptions,
})
// ...
}
And the config:
{
"api": {
"logger": {
"level": "debug",
"redact": {
"paths": [
"req.headers.authorization",
"api.session.secret"
],
"censor": "****"
},
"transport": {
"target": "pino-pretty",
"options": {
"translateTime": "HH:MM:ss Z",
"ignore": "pid,hostname"
}
}
}
}
}
I try to add a attribute in both logger
and logger.transport.options
, nothing changes... So the logger received this config object:
{
"pinoWillSendConfig": true,
"level": "debug",
"redact": {
"paths": [
"req.headers.authorization",
"api.session.secret"
],
"censor": "****"
},
"transport": {
"target": "pino-pretty",
"options": {
"pinoWillSendConfig": true,
"translateTime": "HH:MM:ss Z",
"ignore": "pid,hostname"
}
}
}
It seems it is #1930 which add this, can you help me?
nioc commented
As a workaround, downgrading to 8.20 (with overrides
in package.json
as fastyify dependency was set to ^8.17.0
):
{
"dependencies": {
"pino": "8.20",
},
"overrides": {
"fastify": {
"pino": "8.20"
}
}
}
nioc commented
Reproduced with simpler code:
import pino, { LoggerOptions } from 'pino'
import config from 'config'
// this does not work:
const loggerConfig = config.get('api.logger') as LoggerOptions
// this works but is ugly:
const loggerConfigWorkaround = JSON.parse(JSON.stringify(config.get('api.logger'))) as LoggerOptions
export const logger = pino({
...loggerConfig,
})
/home/nicolas/Dev/brewery/node_modules/config/lib/config.js:421
throw Error(`Can not ${message} runtime configuration property: "${name}". Configuration objects are immutable unless ALLOW_CONFIG_MUTATIONS is set.`)
^
Error: Can not add runtime configuration property: "pinoWillSendConfig". Configuration objects are immutable unless ALLOW_CONFIG_MUTATIONS is set.
at Object.set (/home/nicolas/Dev/brewery/node_modules/config/lib/config.js:421:19)
at transport (/home/nicolas/Dev/brewery/apps/server/node_modules/pino/lib/transport.js:114:30)
at normalizeArgs (/home/nicolas/Dev/brewery/apps/server/node_modules/pino/lib/tools.js:316:16)
at pino (/home/nicolas/Dev/brewery/apps/server/node_modules/pino/pino.js:90:28)
at Object.<anonymous> (/home/nicolas/Dev/brewery/apps/server/src/logger.ts:6:27)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module.m._compile (/home/nicolas/Dev/brewery/node_modules/ts-node/src/index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Object.require.extensions.<computed> [as .ts] (/home/nicolas/Dev/brewery/node_modules/ts-node/src/index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:1207:32)