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.
		
		
		
		
		
			
		
			
				
					243 lines
				
				5.2 KiB
			
		
		
			
		
	
	
					243 lines
				
				5.2 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | /* eslint no-prototype-builtins: 0 */ | ||
|  | 
 | ||
|  | const { hostname } = require('os') | ||
|  | const { test } = require('tap') | ||
|  | const { sink, once } = require('./helper') | ||
|  | const pino = require('../') | ||
|  | 
 | ||
|  | process.removeAllListeners('warning') | ||
|  | 
 | ||
|  | test('useLevelLabels', async ({ match, equal }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP001') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     useLevelLabels: true | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('hello world') | ||
|  |   match(await o, { level: 'info' }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('changeLevelName', async ({ match, equal }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP002') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     changeLevelName: 'priority' | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('hello world') | ||
|  |   match(await o, { priority: 30 }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('levelKey', async ({ match, equal }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP002') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     levelKey: 'priority' | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('hello world') | ||
|  |   match(await o, { priority: 30 }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('useLevelLabels and changeLevelName', async ({ match, equal }) => { | ||
|  |   let count = 0 | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, count === 0 ? 'PINODEP001' : 'PINODEP002') | ||
|  |     count += 1 | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     changeLevelName: 'priority', | ||
|  |     useLevelLabels: true | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('hello world') | ||
|  |   match(await o, { priority: 'info' }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('pino.* serializer', async ({ match, equal, pass }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP003') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     serializers: { | ||
|  |       [Symbol.for('pino.*')] (log) { | ||
|  |         pass('called') | ||
|  |         return log | ||
|  |       } | ||
|  |     } | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('hello world') | ||
|  |   match(await o, { level: 30 }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('child(bindings.serializers)', async ({ match, equal, pass }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP004') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const parent = pino({ serializers: { test: () => 'parent' } }, stream) | ||
|  |   const child = parent.child({ | ||
|  |     serializers: { | ||
|  |       test () { | ||
|  |         pass('called') | ||
|  |         return 'child' | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   child.fatal({ test: 'test' }) | ||
|  |   match(await o, { test: 'child' }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('child(bindings.formatters)', async ({ match, equal, pass }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP005') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     formatters: { | ||
|  |       level (label, number) { | ||
|  |         return { | ||
|  |           log: { | ||
|  |             level: label | ||
|  |           } | ||
|  |         } | ||
|  |       }, | ||
|  |       bindings (bindings) { | ||
|  |         return { | ||
|  |           process: { | ||
|  |             pid: bindings.pid | ||
|  |           }, | ||
|  |           host: { | ||
|  |             name: bindings.hostname | ||
|  |           } | ||
|  |         } | ||
|  |       }, | ||
|  |       log (obj) { | ||
|  |         return { hello: 'world', ...obj } | ||
|  |       } | ||
|  |     } | ||
|  |   }, stream) | ||
|  | 
 | ||
|  |   const child = logger.child({ | ||
|  |     foo: 'bar', | ||
|  |     nested: { object: true }, | ||
|  |     formatters: { | ||
|  |       bindings (bindings) { | ||
|  |         pass('called') | ||
|  |         return { ...bindings, faz: 'baz' } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   child.info('hello world') | ||
|  |   match(await o, { | ||
|  |     log: { | ||
|  |       level: 'info' | ||
|  |     }, | ||
|  |     process: { | ||
|  |       pid: process.pid | ||
|  |     }, | ||
|  |     host: { | ||
|  |       name: hostname() | ||
|  |     }, | ||
|  |     hello: 'world', | ||
|  |     foo: 'bar', | ||
|  |     nested: { object: true }, | ||
|  |     faz: 'baz' | ||
|  |   }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('child(bindings.customLevels)', async ({ match, equal, pass }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP006') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino(stream).child({ | ||
|  |     childMsg: 'ok', | ||
|  |     customLevels: { | ||
|  |       foo: 35 | ||
|  |     } | ||
|  |   }, { | ||
|  |     formatters: { | ||
|  |       level (label, number) { | ||
|  |         if (label === 'foo' && number === 35) { | ||
|  |           pass('using customLevels') | ||
|  |         } | ||
|  |         return { level: number } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.foo('test') | ||
|  |   match(await o, { | ||
|  |     level: 35, | ||
|  |     childMsg: 'ok', | ||
|  |     msg: 'test' | ||
|  |   }) | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) | ||
|  | 
 | ||
|  | test('child(bindings.level)', async ({ equal, pass }) => { | ||
|  |   process.on('warning', onWarning) | ||
|  |   function onWarning (warn) { | ||
|  |     equal(warn.code, 'PINODEP007') | ||
|  |   } | ||
|  | 
 | ||
|  |   const stream = sink() | ||
|  |   const logger = pino({ | ||
|  |     level: 'info' | ||
|  |   }, stream).child({ | ||
|  |     level: 'trace' | ||
|  |   }) | ||
|  | 
 | ||
|  |   const o = once(stream, 'data') | ||
|  |   logger.info('test') | ||
|  |   if (await o === null) { | ||
|  |     pass('child can overrid parent level') | ||
|  |   } | ||
|  |   process.removeListener('warning', onWarning) | ||
|  | }) |