Skip to content

Commit 9008526

Browse files
committed
fix(instrumentation-pino): Propagate all args to mixin
We noticed that our user-defined `mixin` was breaking because it could not access the third `logger` argument. https://getpino.io/#/docs/api?id=mixin-function
1 parent 8a93515 commit 9008526

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

packages/instrumentation-pino/src/instrumentation.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,14 @@ export class PinoInstrumentation extends InstrumentationBase<PinoInstrumentation
6767
if (origMixin === undefined) {
6868
logger[mixinSym] = otelMixin;
6969
} else {
70-
logger[mixinSym] = (ctx: object, level: number) => {
70+
logger[mixinSym] = (
71+
ctx: object,
72+
level: number,
73+
...rest: unknown[]
74+
) => {
7175
return Object.assign(
7276
otelMixin(ctx, level),
73-
origMixin(ctx, level)
77+
origMixin(ctx, level, ...rest)
7478
);
7579
};
7680
}

packages/instrumentation-pino/test/pino.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,48 @@ describe('PinoInstrumentation', () => {
371371
});
372372
});
373373

374+
it('propagates parameters to user mixin', () => {
375+
const logger = pino(
376+
{
377+
name: 'LogLog',
378+
mixin: (mergeObject: object, level: number, logger: Pino.Logger) => ({
379+
mixinArgs: {
380+
mergeObject,
381+
level,
382+
logger: {
383+
bindings: logger.bindings(),
384+
},
385+
},
386+
mixinProp: 'mixinValue',
387+
}),
388+
},
389+
process.stdout
390+
);
391+
392+
const childLogger = logger.child({ childProp: 'childValue' });
393+
394+
tracer.startActiveSpan('abc', span => {
395+
childLogger.info({ objProp: 'objValue' }, 'a message');
396+
span.end();
397+
398+
const record = JSON.parse(stdoutSpy.firstCall.args[0].toString());
399+
assertRecord(record, span);
400+
assert.deepStrictEqual(record['mixinArgs'], {
401+
mergeObject: {
402+
objProp: 'objValue',
403+
},
404+
level: 30,
405+
logger: {
406+
bindings: {
407+
childProp: 'childValue',
408+
},
409+
},
410+
});
411+
assert.strictEqual(record['mixinProp'], 'mixinValue');
412+
assert.strictEqual(record['name'], 'LogLog');
413+
});
414+
});
415+
374416
it('ensures user mixin values take precedence', () => {
375417
const logger = pino(
376418
{

0 commit comments

Comments
 (0)