mirror of
https://github.com/pinojs/pino.git
synced 2026-02-01 17:46:06 +00:00
feat: add level number to mixin callback (#1364)
This commit is contained in:
parent
5cd49f1412
commit
6fbd2fb25f
22
docs/api.md
22
docs/api.md
@ -119,8 +119,8 @@ Option to limit stringification of properties/elements when logging a specific o
|
||||
Default: `undefined`
|
||||
|
||||
If provided, the `mixin` function is called each time one of the active
|
||||
logging methods is called. The first and only parameter is the value `mergeObject` or an empty object. The function must synchronously return an
|
||||
object. The properties of the returned object will be added to the
|
||||
logging methods is called. The first parameter is the value `mergeObject` or an empty object. The second parameter is the leg level number.
|
||||
The function must synchronously return an object. The properties of the returned object will be added to the
|
||||
logged JSON.
|
||||
|
||||
```js
|
||||
@ -153,12 +153,28 @@ const logger = pino({
|
||||
logger.info({
|
||||
description: 'Ok'
|
||||
}, 'Message 1')
|
||||
// {"level":30,"time":1591195061437,"pid":16012,"hostname":"x","appName":"My app","description":"Ok" "msg":"Message 1"}
|
||||
// {"level":30,"time":1591195061437,"pid":16012,"hostname":"x","appName":"My app","description":"Ok","msg":"Message 1"}
|
||||
logger.info('Message 2')
|
||||
// {"level":30,"time":1591195061437,"pid":16012,"hostname":"x","appName":"My app","description":"Ok","msg":"Message 2"}
|
||||
// Note: the second log contains "description":"Ok" text, even if it was not provided.
|
||||
```
|
||||
|
||||
The `mixin` method can be used to add the level label to each log message such as in the following example:
|
||||
```js
|
||||
const logger = pino({
|
||||
mixin(_context, level) {
|
||||
return { 'level-label': logger.levels.labels[level] }
|
||||
}
|
||||
})
|
||||
|
||||
logger.info({
|
||||
description: 'Ok'
|
||||
}, 'Message 1')
|
||||
// {"level":30,"time":1591195061437,"pid":16012,"hostname":"x","appName":"My app","description":"Ok","level-label":"info","msg":"Message 1"}
|
||||
logger.error('Message 2')
|
||||
// {"level":30,"time":1591195061437,"pid":16012,"hostname":"x","appName":"My app","description":"Ok","level-label":"error","msg":"Message 2"}
|
||||
```
|
||||
|
||||
If the `mixin` feature is being used merely to add static metadata to each log message,
|
||||
then a [child logger ⇗](/docs/child-loggers.md) should be used instead.
|
||||
|
||||
|
||||
@ -192,7 +192,7 @@ function write (_obj, msg, num) {
|
||||
}
|
||||
|
||||
if (mixin) {
|
||||
obj = mixinMergeStrategy(obj, mixin(obj))
|
||||
obj = mixinMergeStrategy(obj, mixin(obj, num))
|
||||
}
|
||||
|
||||
const s = this[asJsonSym](obj, msg, num, t)
|
||||
|
||||
2
pino.d.ts
vendored
2
pino.d.ts
vendored
@ -31,7 +31,7 @@ import type { WorkerOptions } from "worker_threads";
|
||||
type ThreadStream = any
|
||||
|
||||
type TimeFn = () => string;
|
||||
type MixinFn = (mergeObject: object) => object;
|
||||
type MixinFn = (mergeObject: object, level: number) => object;
|
||||
type MixinMergeStrategyFn = (mergeObject: object, mixinObject: object) => object;
|
||||
|
||||
type CustomLevelLogger<Options> = Options extends { customLevels: Record<string, number> } ? Record<keyof Options["customLevels"], LogFn> : Record<never, LogFn>
|
||||
|
||||
@ -140,3 +140,23 @@ test('mixin works without context', async ({ ok, same }) => {
|
||||
instance.level = name
|
||||
instance[name]('test')
|
||||
})
|
||||
|
||||
test('mixin can use level number', async ({ ok, same }) => {
|
||||
const stream = sink()
|
||||
const instance = pino({
|
||||
mixin (context, num) {
|
||||
ok(num !== null, 'level should be defined')
|
||||
ok(num !== undefined, 'level should be defined')
|
||||
same(num, level)
|
||||
return Object.assign({
|
||||
error: context.message,
|
||||
stack: context.stack
|
||||
})
|
||||
}
|
||||
}, stream)
|
||||
instance.level = name
|
||||
instance[name]({
|
||||
message: '123',
|
||||
stack: 'stack'
|
||||
}, 'test')
|
||||
})
|
||||
|
||||
@ -47,6 +47,14 @@ pino({
|
||||
mixin: () => ({ customName: "unknown", customId: 111 }),
|
||||
});
|
||||
|
||||
pino({
|
||||
mixin: (context: object) => ({ customName: "unknown", customId: 111 }),
|
||||
});
|
||||
|
||||
pino({
|
||||
mixin: (context: object, level: number) => ({ customName: "unknown", customId: 111 }),
|
||||
});
|
||||
|
||||
pino({
|
||||
redact: { paths: [], censor: "SECRET" },
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user