mirror of
https://github.com/pinojs/pino.git
synced 2025-12-08 20:36:13 +00:00
add new streamWrite hook (#2105)
This commit is contained in:
parent
1bff08ae86
commit
bb1f89dbd9
17
docs/api.md
17
docs/api.md
@ -375,6 +375,23 @@ const hooks = {
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
<a id="streamWrite"></a>
|
||||
##### `streamWrite`
|
||||
|
||||
Allows for manipulating the _stringified_ JSON log data just before writing to various transports.
|
||||
|
||||
The method receives the stringified JSON and must return valid stringified JSON.
|
||||
|
||||
For example:
|
||||
```js
|
||||
const hooks = {
|
||||
streamWrite (s) {
|
||||
return s.replaceAll('sensitive-api-key', 'XXX')
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<a id=opt-formatters></a>
|
||||
#### `formatters` (Object)
|
||||
|
||||
|
||||
@ -27,7 +27,8 @@ const {
|
||||
stringifySym,
|
||||
formatOptsSym,
|
||||
stringifiersSym,
|
||||
msgPrefixSym
|
||||
msgPrefixSym,
|
||||
hooksSym
|
||||
} = require('./symbols')
|
||||
const {
|
||||
getLevel,
|
||||
@ -185,6 +186,7 @@ function write (_obj, msg, num) {
|
||||
const messageKey = this[messageKeySym]
|
||||
const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy
|
||||
let obj
|
||||
const streamWriteHook = this[hooksSym].streamWrite
|
||||
|
||||
if (_obj === undefined || _obj === null) {
|
||||
obj = {}
|
||||
@ -214,7 +216,7 @@ function write (_obj, msg, num) {
|
||||
stream.lastTime = t.slice(this[timeSliceIndexSym])
|
||||
stream.lastLogger = this // for child loggers
|
||||
}
|
||||
stream.write(s)
|
||||
stream.write(streamWriteHook ? streamWriteHook(s) : s)
|
||||
}
|
||||
|
||||
function noop () {}
|
||||
|
||||
6
pino.d.ts
vendored
6
pino.d.ts
vendored
@ -641,6 +641,12 @@ declare namespace pino {
|
||||
* using apply, like so: method.apply(this, newArgumentsArray).
|
||||
*/
|
||||
logMethod?: (this: Logger, args: Parameters<LogFn>, method: LogFn, level: number) => void;
|
||||
|
||||
/**
|
||||
* Allows for manipulating the stringified JSON log output just before writing to various transports.
|
||||
* This function must return a string and must be valid JSON.
|
||||
*/
|
||||
streamWrite?: (s: string) => string;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
3
pino.js
3
pino.js
@ -70,7 +70,8 @@ const defaultOptions = {
|
||||
}
|
||||
}),
|
||||
hooks: {
|
||||
logMethod: undefined
|
||||
logMethod: undefined,
|
||||
streamWrite: undefined
|
||||
},
|
||||
timestamp: epochTime,
|
||||
name: undefined,
|
||||
|
||||
@ -95,3 +95,24 @@ tap.test('log method hook', t => {
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
tap.test('streamWrite hook', t => {
|
||||
t.test('gets invoked', async t => {
|
||||
t.plan(1)
|
||||
|
||||
const stream = sink()
|
||||
const logger = pino({
|
||||
hooks: {
|
||||
streamWrite (s) {
|
||||
return s.replaceAll('redact-me', 'XXX')
|
||||
}
|
||||
}
|
||||
}, stream)
|
||||
|
||||
const o = once(stream, 'data')
|
||||
logger.info('hide redact-me in this string')
|
||||
t.match(await o, { msg: 'hide XXX in this string' })
|
||||
})
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
@ -209,6 +209,10 @@ const withHooks = pino({
|
||||
expectType<pino.Logger>(this);
|
||||
return method.apply(this, args);
|
||||
},
|
||||
streamWrite(s) {
|
||||
expectType<string>(s);
|
||||
return s.replaceAll('secret-key', 'xxx');
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user