You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
350 lines
7.7 KiB
350 lines
7.7 KiB
4 years ago
|
'use strict'
|
||
|
const test = require('tape')
|
||
|
const pino = require('../browser')
|
||
|
|
||
|
function noop () {}
|
||
|
|
||
|
test('throws if transmit object does not have send function', ({ end, throws }) => {
|
||
|
throws(() => {
|
||
|
pino({ browser: { transmit: {} } })
|
||
|
})
|
||
|
|
||
|
throws(() => {
|
||
|
pino({ browser: { transmit: { send: 'not a func' } } })
|
||
|
})
|
||
|
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('calls send function after write', ({ end, is }) => {
|
||
|
var c = 0
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: () => {
|
||
|
c++
|
||
|
},
|
||
|
transmit: {
|
||
|
send () { is(c, 1) }
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal({ test: 'test' })
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function the logged level', ({ end, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write () {},
|
||
|
transmit: {
|
||
|
send (level) {
|
||
|
is(level, 'fatal')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal({ test: 'test' })
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function message strings in logEvent object when asObject is not set', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, { messages }) {
|
||
|
is(messages[0], 'test')
|
||
|
is(messages[1], 'another test')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal('test', 'another test')
|
||
|
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function message objects in logEvent object when asObject is not set', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, { messages }) {
|
||
|
same(messages[0], { test: 'test' })
|
||
|
is(messages[1], 'another test')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal({ test: 'test' }, 'another test')
|
||
|
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function message strings in logEvent object when asObject is set', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
asObject: true,
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, { messages }) {
|
||
|
is(messages[0], 'test')
|
||
|
is(messages[1], 'another test')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal('test', 'another test')
|
||
|
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function message objects in logEvent object when asObject is set', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
asObject: true,
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, { messages }) {
|
||
|
same(messages[0], { test: 'test' })
|
||
|
is(messages[1], 'another test')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal({ test: 'test' }, 'another test')
|
||
|
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('supplies a timestamp (ts) in logEvent object which is exactly the same as the `time` property in asObject mode', ({ end, is }) => {
|
||
|
var expected
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
asObject: true, // implict because `write`, but just to be explicit
|
||
|
write (o) {
|
||
|
expected = o.time
|
||
|
},
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
is(logEvent.ts, expected)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal('test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function child bindings via logEvent object', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
const messages = logEvent.messages
|
||
|
const bindings = logEvent.bindings
|
||
|
same(bindings[0], { first: 'binding' })
|
||
|
same(bindings[1], { second: 'binding2' })
|
||
|
same(messages[0], { test: 'test' })
|
||
|
is(messages[1], 'another test')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger
|
||
|
.child({ first: 'binding' })
|
||
|
.child({ second: 'binding2' })
|
||
|
.fatal({ test: 'test' }, 'another test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('passes send function level:{label, value} via logEvent object', ({ end, is }) => {
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
const label = logEvent.level.label
|
||
|
const value = logEvent.level.value
|
||
|
|
||
|
is(label, 'fatal')
|
||
|
is(value, 60)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger.fatal({ test: 'test' }, 'another test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('calls send function according to transmit.level', ({ end, is }) => {
|
||
|
var c = 0
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
level: 'error',
|
||
|
send (level) {
|
||
|
c++
|
||
|
if (c === 1) is(level, 'error')
|
||
|
if (c === 2) is(level, 'fatal')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
logger.warn('ignored')
|
||
|
logger.error('test')
|
||
|
logger.fatal('test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('transmit.level defaults to logger level', ({ end, is }) => {
|
||
|
var c = 0
|
||
|
const logger = pino({
|
||
|
level: 'error',
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level) {
|
||
|
c++
|
||
|
if (c === 1) is(level, 'error')
|
||
|
if (c === 2) is(level, 'fatal')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
logger.warn('ignored')
|
||
|
logger.error('test')
|
||
|
logger.fatal('test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('transmit.level is effective even if lower than logger level', ({ end, is }) => {
|
||
|
var c = 0
|
||
|
const logger = pino({
|
||
|
level: 'error',
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
level: 'info',
|
||
|
send (level) {
|
||
|
c++
|
||
|
if (c === 1) is(level, 'warn')
|
||
|
if (c === 2) is(level, 'error')
|
||
|
if (c === 3) is(level, 'fatal')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
logger.warn('ignored')
|
||
|
logger.error('test')
|
||
|
logger.fatal('test')
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('applies all serializers to messages and bindings (serialize:false - default)', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
serializers: {
|
||
|
first: () => 'first',
|
||
|
second: () => 'second',
|
||
|
test: () => 'serialize it'
|
||
|
},
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
const messages = logEvent.messages
|
||
|
const bindings = logEvent.bindings
|
||
|
same(bindings[0], { first: 'first' })
|
||
|
same(bindings[1], { second: 'second' })
|
||
|
same(messages[0], { test: 'serialize it' })
|
||
|
is(messages[1].type, 'Error')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger
|
||
|
.child({ first: 'binding' })
|
||
|
.child({ second: 'binding2' })
|
||
|
.fatal({ test: 'test' }, Error())
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('applies all serializers to messages and bindings (serialize:true)', ({ end, same, is }) => {
|
||
|
const logger = pino({
|
||
|
serializers: {
|
||
|
first: () => 'first',
|
||
|
second: () => 'second',
|
||
|
test: () => 'serialize it'
|
||
|
},
|
||
|
browser: {
|
||
|
serialize: true,
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
const messages = logEvent.messages
|
||
|
const bindings = logEvent.bindings
|
||
|
same(bindings[0], { first: 'first' })
|
||
|
same(bindings[1], { second: 'second' })
|
||
|
same(messages[0], { test: 'serialize it' })
|
||
|
is(messages[1].type, 'Error')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
logger
|
||
|
.child({ first: 'binding' })
|
||
|
.child({ second: 'binding2' })
|
||
|
.fatal({ test: 'test' }, Error())
|
||
|
end()
|
||
|
})
|
||
|
|
||
|
test('extracts correct bindings and raw messages over multiple transmits', ({ end, same, is }) => {
|
||
|
var messages = null
|
||
|
var bindings = null
|
||
|
|
||
|
const logger = pino({
|
||
|
browser: {
|
||
|
write: noop,
|
||
|
transmit: {
|
||
|
send (level, logEvent) {
|
||
|
messages = logEvent.messages
|
||
|
bindings = logEvent.bindings
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
const child = logger.child({ child: true })
|
||
|
const grandchild = child.child({ grandchild: true })
|
||
|
|
||
|
logger.fatal({ test: 'parent:test1' })
|
||
|
logger.fatal({ test: 'parent:test2' })
|
||
|
same([], bindings)
|
||
|
same([{ test: 'parent:test2' }], messages)
|
||
|
|
||
|
child.fatal({ test: 'child:test1' })
|
||
|
child.fatal({ test: 'child:test2' })
|
||
|
same([{ child: true }], bindings)
|
||
|
same([{ test: 'child:test2' }], messages)
|
||
|
|
||
|
grandchild.fatal({ test: 'grandchild:test1' })
|
||
|
grandchild.fatal({ test: 'grandchild:test2' })
|
||
|
same([{ child: true }, { grandchild: true }], bindings)
|
||
|
same([{ test: 'grandchild:test2' }], messages)
|
||
|
|
||
|
end()
|
||
|
})
|