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.
		
		
		
		
		
			
		
			
				
					355 lines
				
				8.3 KiB
			
		
		
			
		
	
	
					355 lines
				
				8.3 KiB
			| 
											3 years ago
										 | 'use strict' | ||
|  | // eslint-disable-next-line
 | ||
|  | if (typeof $1 !== 'undefined') $1 = arguments.callee.caller.arguments[0] | ||
|  | 
 | ||
|  | const test = require('tape') | ||
|  | const fresh = require('import-fresh') | ||
|  | const pino = require('../browser') | ||
|  | 
 | ||
|  | const parentSerializers = { | ||
|  |   test: () => 'parent' | ||
|  | } | ||
|  | 
 | ||
|  | const childSerializers = { | ||
|  |   test: () => 'child' | ||
|  | } | ||
|  | 
 | ||
|  | test('serializers override values', ({ end, is }) => { | ||
|  |   const parent = pino({ | ||
|  |     serializers: parentSerializers, | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write (o) { | ||
|  |         is(o.test, 'parent') | ||
|  |         end() | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   parent.fatal({ test: 'test' }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('without the serialize option, serializers do not override values', ({ end, is }) => { | ||
|  |   const parent = pino({ | ||
|  |     serializers: parentSerializers, | ||
|  |     browser: { | ||
|  |       write (o) { | ||
|  |         is(o.test, 'test') | ||
|  |         end() | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   parent.fatal({ test: 'test' }) | ||
|  | }) | ||
|  | 
 | ||
|  | if (process.title !== 'browser') { | ||
|  |   test('if serialize option is true, standard error serializer is auto enabled', ({ end, same }) => { | ||
|  |     const err = Error('test') | ||
|  |     err.code = 'test' | ||
|  |     err.type = 'Error' // get that cov
 | ||
|  |     const expect = pino.stdSerializers.err(err) | ||
|  | 
 | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (err) { | ||
|  |       same(err, expect) | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser')({ | ||
|  |       browser: { serialize: true } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.fatal(err) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('if serialize option is array, standard error serializer is auto enabled', ({ end, same }) => { | ||
|  |     const err = Error('test') | ||
|  |     err.code = 'test' | ||
|  |     const expect = pino.stdSerializers.err(err) | ||
|  | 
 | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (err) { | ||
|  |       same(err, expect) | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       browser: { serialize: [] } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.fatal(err) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('if serialize option is array containing !stdSerializers.err, standard error serializer is disabled', ({ end, is }) => { | ||
|  |     const err = Error('test') | ||
|  |     err.code = 'test' | ||
|  |     const expect = err | ||
|  | 
 | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (err) { | ||
|  |       is(err, expect) | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       browser: { serialize: ['!stdSerializers.err'] } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.fatal(err) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('in browser, serializers apply to all objects', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (test, test2, test3, test4, test5) { | ||
|  |       is(test.key, 'serialized') | ||
|  |       is(test2.key2, 'serialized2') | ||
|  |       is(test5.key3, 'serialized3') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized', | ||
|  |         key2: () => 'serialized2', | ||
|  |         key3: () => 'serialized3' | ||
|  |       }, | ||
|  |       browser: { serialize: true } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('serialize can be an array of selected serializers', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (test, test2, test3, test4, test5) { | ||
|  |       is(test.key, 'test') | ||
|  |       is(test2.key2, 'serialized2') | ||
|  |       is(test5.key3, 'test') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized', | ||
|  |         key2: () => 'serialized2', | ||
|  |         key3: () => 'serialized3' | ||
|  |       }, | ||
|  |       browser: { serialize: ['key2'] } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('serialize filter applies to child loggers', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (binding, test, test2, test3, test4, test5) { | ||
|  |       is(test.key, 'test') | ||
|  |       is(test2.key2, 'serialized2') | ||
|  |       is(test5.key3, 'test') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       browser: { serialize: ['key2'] } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.child({ | ||
|  |       aBinding: 'test' | ||
|  |     }, { | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized', | ||
|  |         key2: () => 'serialized2', | ||
|  |         key3: () => 'serialized3' | ||
|  |       } | ||
|  |     }).fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('serialize filter applies to child loggers through bindings', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (binding, test, test2, test3, test4, test5) { | ||
|  |       is(test.key, 'test') | ||
|  |       is(test2.key2, 'serialized2') | ||
|  |       is(test5.key3, 'test') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       browser: { serialize: ['key2'] } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.child({ | ||
|  |       aBinding: 'test', | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized', | ||
|  |         key2: () => 'serialized2', | ||
|  |         key3: () => 'serialized3' | ||
|  |       } | ||
|  |     }).fatal({ key: 'test' }, { key2: 'test' }, 'str should skip', [{ foo: 'array should skip' }], { key3: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('parent serializers apply to child bindings', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (binding) { | ||
|  |       is(binding.key, 'serialized') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized' | ||
|  |       }, | ||
|  |       browser: { serialize: true } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.child({ key: 'test' }).fatal({ test: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | 
 | ||
|  |   test('child serializers apply to child bindings', ({ end, is }) => { | ||
|  |     const consoleError = console.error | ||
|  |     console.error = function (binding) { | ||
|  |       is(binding.key, 'serialized') | ||
|  |     } | ||
|  | 
 | ||
|  |     const logger = fresh('../browser', require)({ | ||
|  |       browser: { serialize: true } | ||
|  |     }) | ||
|  | 
 | ||
|  |     console.error = consoleError | ||
|  | 
 | ||
|  |     logger.child({ | ||
|  |       key: 'test' | ||
|  |     }, { | ||
|  |       serializers: { | ||
|  |         key: () => 'serialized' | ||
|  |       } | ||
|  |     }).fatal({ test: 'test' }) | ||
|  |     end() | ||
|  |   }) | ||
|  | } | ||
|  | 
 | ||
|  | test('child does not overwrite parent serializers', ({ end, is }) => { | ||
|  |   let c = 0 | ||
|  |   const parent = pino({ | ||
|  |     serializers: parentSerializers, | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write (o) { | ||
|  |         c++ | ||
|  |         if (c === 1) is(o.test, 'parent') | ||
|  |         if (c === 2) { | ||
|  |           is(o.test, 'child') | ||
|  |           end() | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  |   const child = parent.child({}, { serializers: childSerializers }) | ||
|  | 
 | ||
|  |   parent.fatal({ test: 'test' }) | ||
|  |   child.fatal({ test: 'test' }) | ||
|  | }) | ||
|  | 
 | ||
|  | test('children inherit parent serializers', ({ end, is }) => { | ||
|  |   const parent = pino({ | ||
|  |     serializers: parentSerializers, | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write (o) { | ||
|  |         is(o.test, 'parent') | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const child = parent.child({ a: 'property' }) | ||
|  |   child.fatal({ test: 'test' }) | ||
|  |   end() | ||
|  | }) | ||
|  | 
 | ||
|  | test('children serializers get called', ({ end, is }) => { | ||
|  |   const parent = pino({ | ||
|  |     test: 'this', | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write (o) { | ||
|  |         is(o.test, 'child') | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const child = parent.child({ a: 'property' }, { serializers: childSerializers }) | ||
|  | 
 | ||
|  |   child.fatal({ test: 'test' }) | ||
|  |   end() | ||
|  | }) | ||
|  | 
 | ||
|  | test('children serializers get called when inherited from parent', ({ end, is }) => { | ||
|  |   const parent = pino({ | ||
|  |     test: 'this', | ||
|  |     serializers: parentSerializers, | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write: (o) => { | ||
|  |         is(o.test, 'pass') | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const child = parent.child({}, { serializers: { test: () => 'pass' } }) | ||
|  | 
 | ||
|  |   child.fatal({ test: 'fail' }) | ||
|  |   end() | ||
|  | }) | ||
|  | 
 | ||
|  | test('non overridden serializers are available in the children', ({ end, is }) => { | ||
|  |   const pSerializers = { | ||
|  |     onlyParent: () => 'parent', | ||
|  |     shared: () => 'parent' | ||
|  |   } | ||
|  | 
 | ||
|  |   const cSerializers = { | ||
|  |     shared: () => 'child', | ||
|  |     onlyChild: () => 'child' | ||
|  |   } | ||
|  | 
 | ||
|  |   let c = 0 | ||
|  | 
 | ||
|  |   const parent = pino({ | ||
|  |     serializers: pSerializers, | ||
|  |     browser: { | ||
|  |       serialize: true, | ||
|  |       write (o) { | ||
|  |         c++ | ||
|  |         if (c === 1) is(o.shared, 'child') | ||
|  |         if (c === 2) is(o.onlyParent, 'parent') | ||
|  |         if (c === 3) is(o.onlyChild, 'child') | ||
|  |         if (c === 4) is(o.onlyChild, 'test') | ||
|  |       } | ||
|  |     } | ||
|  |   }) | ||
|  | 
 | ||
|  |   const child = parent.child({}, { serializers: cSerializers }) | ||
|  | 
 | ||
|  |   child.fatal({ shared: 'test' }) | ||
|  |   child.fatal({ onlyParent: 'test' }) | ||
|  |   child.fatal({ onlyChild: 'test' }) | ||
|  |   parent.fatal({ onlyChild: 'test' }) | ||
|  |   end() | ||
|  | }) |