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
						
					
					
				'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 }) => {
 | 
						|
  let 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 }) => {
 | 
						|
  let expected
 | 
						|
  const logger = pino({
 | 
						|
    browser: {
 | 
						|
      asObject: true, // implicit 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 }) => {
 | 
						|
  let 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 }) => {
 | 
						|
  let 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 }) => {
 | 
						|
  let 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 }) => {
 | 
						|
  let messages = null
 | 
						|
  let 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()
 | 
						|
})
 |