Skip to content

Commit 7f33a0e

Browse files
authored
Add formatters log option (#1905)
1 parent 79fe14e commit 7f33a0e

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

browser.js

+11-12
Original file line numberDiff line numberDiff line change
@@ -325,32 +325,31 @@ function createWrap (self, opts, rootLogger, level) {
325325

326326
function asObject (logger, level, args, ts, formatters = {}) {
327327
const {
328-
level: levelFormatter
328+
level: levelFormatter = () => logger.levels.values[level],
329+
log: logObjectFormatter = (obj) => obj
329330
} = formatters
330331
if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)
331332
const argsCloned = args.slice()
332333
let msg = argsCloned[0]
333-
const o = {}
334+
const logObject = {}
334335
if (ts) {
335-
o.time = ts
336-
}
337-
if (levelFormatter) {
338-
const formattedLevel = levelFormatter(level, logger.levels.values[level])
339-
Object.assign(o, formattedLevel)
340-
} else {
341-
o.level = logger.levels.values[level]
336+
logObject.time = ts
342337
}
338+
logObject.level = levelFormatter(level, logger.levels.values[level])
339+
343340
let lvl = (logger._childLevel | 0) + 1
344341
if (lvl < 1) lvl = 1
345342
// deliberate, catching objects, arrays
346343
if (msg !== null && typeof msg === 'object') {
347344
while (lvl-- && typeof argsCloned[0] === 'object') {
348-
Object.assign(o, argsCloned.shift())
345+
Object.assign(logObject, argsCloned.shift())
349346
}
350347
msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined
351348
} else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)
352-
if (msg !== undefined) o.msg = msg
353-
return o
349+
if (msg !== undefined) logObject.msg = msg
350+
351+
const formattedLogObject = logObjectFormatter(logObject)
352+
return formattedLogObject
354353
}
355354

356355
function applySerializers (args, serialize, serializers, stdErrSerialize) {

test/browser.test.js

+24
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,30 @@ test('opts.browser.formatters logs pino-like object to console', ({ end, ok, is
189189
end()
190190
})
191191

192+
test('opts.browser.formatters logs pino-like object to console', ({ end, ok, is }) => {
193+
const info = console.info
194+
console.info = function (o) {
195+
is(o.level, 30)
196+
is(o.msg, 'test')
197+
is(o.hello, 'world')
198+
is(o.newField, 'test')
199+
ok(o.time, `Logged at ${o.time}`)
200+
console.info = info
201+
}
202+
const instance = require('../browser')({
203+
browser: {
204+
formatters: {
205+
log (o) {
206+
return { ...o, newField: 'test', time: `Logged at ${o.time}` }
207+
}
208+
}
209+
}
210+
})
211+
212+
instance.info({ hello: 'world' }, 'test')
213+
end()
214+
})
215+
192216
test('opts.browser.write func log single string', ({ end, ok, is }) => {
193217
const instance = pino({
194218
browser: {

0 commit comments

Comments
 (0)