pino-testkit 10.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nojekyll +0 -0
- package/.prettierignore +1 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +30 -0
- package/LICENSE +21 -0
- package/README.md +175 -0
- package/SECURITY.md +87 -0
- package/benchmarks/basic.bench.js +95 -0
- package/benchmarks/child-child.bench.js +52 -0
- package/benchmarks/child-creation.bench.js +73 -0
- package/benchmarks/child.bench.js +62 -0
- package/benchmarks/deep-object.bench.js +88 -0
- package/benchmarks/formatters.bench.js +50 -0
- package/benchmarks/internal/custom-levels.js +67 -0
- package/benchmarks/internal/just-pino-heavy.bench.js +76 -0
- package/benchmarks/internal/just-pino.bench.js +182 -0
- package/benchmarks/internal/parent-vs-child.bench.js +75 -0
- package/benchmarks/internal/redact.bench.js +86 -0
- package/benchmarks/long-string.bench.js +81 -0
- package/benchmarks/multi-arg.bench.js +193 -0
- package/benchmarks/multistream.js +98 -0
- package/benchmarks/object.bench.js +82 -0
- package/benchmarks/utils/generate-benchmark-doc.js +36 -0
- package/benchmarks/utils/runbench.js +138 -0
- package/benchmarks/utils/wrap-log-level.js +55 -0
- package/bin.js +6 -0
- package/browser.js +547 -0
- package/build/sync-version.js +25 -0
- package/docs/api.md +1593 -0
- package/docs/asynchronous.md +40 -0
- package/docs/benchmarks.md +55 -0
- package/docs/browser.md +278 -0
- package/docs/bundling.md +40 -0
- package/docs/child-loggers.md +95 -0
- package/docs/diagnostics.md +16 -0
- package/docs/ecosystem.md +86 -0
- package/docs/help.md +345 -0
- package/docs/lts.md +64 -0
- package/docs/pretty.md +35 -0
- package/docs/redaction.md +135 -0
- package/docs/transports.md +1376 -0
- package/docs/web.md +309 -0
- package/eslint.config.js +28 -0
- package/examples/basic.js +43 -0
- package/examples/transport.js +68 -0
- package/favicon.ico +0 -0
- package/file.js +12 -0
- package/inc-version.sh +42 -0
- package/index.html +55 -0
- package/lib/caller.js +30 -0
- package/lib/constants.js +28 -0
- package/lib/contract.js +8 -0
- package/lib/deprecations.js +8 -0
- package/lib/levels.js +241 -0
- package/lib/meta.js +3 -0
- package/lib/multistream.js +203 -0
- package/lib/proto.js +256 -0
- package/lib/redaction.js +114 -0
- package/lib/symbols.js +74 -0
- package/lib/time.js +39 -0
- package/lib/tools.js +427 -0
- package/lib/transport-stream.js +56 -0
- package/lib/transport.js +289 -0
- package/lib/worker.js +194 -0
- package/package.json +119 -0
- package/pino.d.ts +908 -0
- package/pino.js +240 -0
- package/test/basic.test.js +886 -0
- package/test/broken-pipe.test.js +59 -0
- package/test/browser-child.test.js +132 -0
- package/test/browser-disabled.test.js +87 -0
- package/test/browser-early-console-freeze.test.js +12 -0
- package/test/browser-is-level-enabled.test.js +101 -0
- package/test/browser-levels.test.js +241 -0
- package/test/browser-serializers.test.js +352 -0
- package/test/browser-timestamp.test.js +88 -0
- package/test/browser-transmit.test.js +417 -0
- package/test/browser.test.js +698 -0
- package/test/complex-objects.test.js +36 -0
- package/test/crlf.test.js +34 -0
- package/test/custom-levels.test.js +267 -0
- package/test/diagnostics.test.js +107 -0
- package/test/error-key.test.js +37 -0
- package/test/error.test.js +403 -0
- package/test/escaping.test.js +93 -0
- package/test/esm/esm.mjs +14 -0
- package/test/esm/index.test.js +21 -0
- package/test/esm/named-exports.mjs +29 -0
- package/test/exit.test.js +79 -0
- package/test/fixtures/broken-pipe/basic.js +9 -0
- package/test/fixtures/broken-pipe/destination.js +10 -0
- package/test/fixtures/broken-pipe/syncfalse.js +12 -0
- package/test/fixtures/console-transport.js +13 -0
- package/test/fixtures/crashing-transport.js +13 -0
- package/test/fixtures/default-exit.js +8 -0
- package/test/fixtures/destination-exit.js +8 -0
- package/test/fixtures/eval/index.js +13 -0
- package/test/fixtures/eval/node_modules/14-files.js +3 -0
- package/test/fixtures/eval/node_modules/2-files.js +3 -0
- package/test/fixtures/eval/node_modules/file1.js +5 -0
- package/test/fixtures/eval/node_modules/file10.js +5 -0
- package/test/fixtures/eval/node_modules/file11.js +5 -0
- package/test/fixtures/eval/node_modules/file12.js +5 -0
- package/test/fixtures/eval/node_modules/file13.js +5 -0
- package/test/fixtures/eval/node_modules/file14.js +11 -0
- package/test/fixtures/eval/node_modules/file2.js +5 -0
- package/test/fixtures/eval/node_modules/file3.js +5 -0
- package/test/fixtures/eval/node_modules/file4.js +5 -0
- package/test/fixtures/eval/node_modules/file5.js +5 -0
- package/test/fixtures/eval/node_modules/file6.js +5 -0
- package/test/fixtures/eval/node_modules/file7.js +5 -0
- package/test/fixtures/eval/node_modules/file8.js +5 -0
- package/test/fixtures/eval/node_modules/file9.js +5 -0
- package/test/fixtures/noop-transport.js +10 -0
- package/test/fixtures/pretty/null-prototype.js +8 -0
- package/test/fixtures/stdout-hack-protection.js +11 -0
- package/test/fixtures/syncfalse-child.js +6 -0
- package/test/fixtures/syncfalse-exit.js +9 -0
- package/test/fixtures/syncfalse-flush-exit.js +10 -0
- package/test/fixtures/syncfalse.js +6 -0
- package/test/fixtures/syntax-error-esm.mjs +2 -0
- package/test/fixtures/to-file-transport-with-transform.js +20 -0
- package/test/fixtures/to-file-transport.js +13 -0
- package/test/fixtures/to-file-transport.mjs +8 -0
- package/test/fixtures/transport/index.js +12 -0
- package/test/fixtures/transport/package.json +5 -0
- package/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
- package/test/fixtures/transport-exit-immediately.js +11 -0
- package/test/fixtures/transport-exit-on-ready.js +12 -0
- package/test/fixtures/transport-invalid-node-options.js +26 -0
- package/test/fixtures/transport-main.js +9 -0
- package/test/fixtures/transport-many-lines.js +29 -0
- package/test/fixtures/transport-preload-main.mjs +13 -0
- package/test/fixtures/transport-preload.mjs +13 -0
- package/test/fixtures/transport-string-stdout.js +9 -0
- package/test/fixtures/transport-transform.js +21 -0
- package/test/fixtures/transport-uses-pino-config.js +33 -0
- package/test/fixtures/transport-with-on-exit.js +12 -0
- package/test/fixtures/transport-worker-data.js +19 -0
- package/test/fixtures/transport-worker-name.js +24 -0
- package/test/fixtures/transport-worker.js +15 -0
- package/test/fixtures/transport-wrong-export-type.js +3 -0
- package/test/fixtures/ts/to-file-transport-native.mts +15 -0
- package/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
- package/test/fixtures/ts/to-file-transport.ts +11 -0
- package/test/fixtures/ts/transpile.cjs +36 -0
- package/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
- package/test/fixtures/ts/transport-exit-immediately.ts +10 -0
- package/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
- package/test/fixtures/ts/transport-main.ts +8 -0
- package/test/fixtures/ts/transport-string-stdout.ts +8 -0
- package/test/fixtures/ts/transport-worker.ts +14 -0
- package/test/formatters.test.js +364 -0
- package/test/helper.d.ts +4 -0
- package/test/helper.js +155 -0
- package/test/hooks.test.js +114 -0
- package/test/http.test.js +214 -0
- package/test/internals/version.test.js +17 -0
- package/test/is-level-enabled.test.js +179 -0
- package/test/jest/basic.spec.js +10 -0
- package/test/levels.test.js +810 -0
- package/test/metadata.test.js +120 -0
- package/test/mixin-merge-strategy.test.js +57 -0
- package/test/mixin.test.js +241 -0
- package/test/multistream.test.js +729 -0
- package/test/redact.test.js +893 -0
- package/test/serializers.test.js +257 -0
- package/test/stdout-protection.test.js +41 -0
- package/test/syncfalse.test.js +186 -0
- package/test/timestamp-nano.test.js +37 -0
- package/test/timestamp.test.js +124 -0
- package/test/transport/big.test.js +42 -0
- package/test/transport/bundlers-support.test.js +99 -0
- package/test/transport/caller.test.js +24 -0
- package/test/transport/core.test.js +733 -0
- package/test/transport/core.transpiled.test.ts +114 -0
- package/test/transport/crash.test.js +36 -0
- package/test/transport/module-link.test.js +241 -0
- package/test/transport/native-type-stripping.test.mjs +151 -0
- package/test/transport/node-options.test.js +116 -0
- package/test/transport/pipeline.test.js +137 -0
- package/test/transport/preload.test.js +54 -0
- package/test/transport/repl.test.js +15 -0
- package/test/transport/sync-false.test.js +67 -0
- package/test/transport/sync-true.test.js +57 -0
- package/test/transport/targets.test.js +48 -0
- package/test/transport/uses-pino-config.test.js +166 -0
- package/test/transport-stream.test.js +40 -0
- package/test/types/pino-import.test-d.cts +30 -0
- package/test/types/pino-multistream.test-d.ts +28 -0
- package/test/types/pino-top-export.test-d.ts +34 -0
- package/test/types/pino-transport.test-d.ts +156 -0
- package/test/types/pino-type-only.test-d.ts +75 -0
- package/test/types/pino.test-d.ts +683 -0
- package/test/types/pino.ts +91 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { describe, test } = require('node:test')
|
|
4
|
+
const tspl = require('@matteo.collina/tspl')
|
|
5
|
+
|
|
6
|
+
const { sink, match, once } = require('./helper')
|
|
7
|
+
const pino = require('../')
|
|
8
|
+
|
|
9
|
+
describe('log method hook', () => {
|
|
10
|
+
test('gets invoked', async t => {
|
|
11
|
+
const plan = tspl(t, { plan: 7 })
|
|
12
|
+
|
|
13
|
+
const stream = sink()
|
|
14
|
+
const logger = pino({
|
|
15
|
+
hooks: {
|
|
16
|
+
logMethod (args, method, level) {
|
|
17
|
+
plan.equal(Array.isArray(args), true)
|
|
18
|
+
plan.equal(typeof level, 'number')
|
|
19
|
+
plan.equal(args.length, 3)
|
|
20
|
+
plan.equal(level, this.levels.values.info)
|
|
21
|
+
plan.deepEqual(args, ['a', 'b', 'c'])
|
|
22
|
+
|
|
23
|
+
plan.equal(typeof method, 'function')
|
|
24
|
+
plan.equal(method.name, 'LOG')
|
|
25
|
+
|
|
26
|
+
method.apply(this, [args.join('-')])
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}, stream)
|
|
30
|
+
|
|
31
|
+
const o = once(stream, 'data')
|
|
32
|
+
logger.info('a', 'b', 'c')
|
|
33
|
+
match(await o, { msg: 'a-b-c' })
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('fatal method invokes hook', async t => {
|
|
37
|
+
const plan = tspl(t, { plan: 1 })
|
|
38
|
+
|
|
39
|
+
const stream = sink()
|
|
40
|
+
const logger = pino({
|
|
41
|
+
hooks: {
|
|
42
|
+
logMethod (args, method) {
|
|
43
|
+
plan.ok(true)
|
|
44
|
+
method.apply(this, [args.join('-')])
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}, stream)
|
|
48
|
+
|
|
49
|
+
const o = once(stream, 'data')
|
|
50
|
+
logger.fatal('a')
|
|
51
|
+
match(await o, { msg: 'a' })
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('children get the hook', async t => {
|
|
55
|
+
const plan = tspl(t, { plan: 2 })
|
|
56
|
+
|
|
57
|
+
const stream = sink()
|
|
58
|
+
const root = pino({
|
|
59
|
+
hooks: {
|
|
60
|
+
logMethod (args, method) {
|
|
61
|
+
plan.ok(true)
|
|
62
|
+
method.apply(this, [args.join('-')])
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}, stream)
|
|
66
|
+
const child = root.child({ child: 'one' })
|
|
67
|
+
const grandchild = child.child({ child: 'two' })
|
|
68
|
+
|
|
69
|
+
let o = once(stream, 'data')
|
|
70
|
+
child.info('a', 'b')
|
|
71
|
+
match(await o, { msg: 'a-b' })
|
|
72
|
+
|
|
73
|
+
o = once(stream, 'data')
|
|
74
|
+
grandchild.info('c', 'd')
|
|
75
|
+
match(await o, { msg: 'c-d' })
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
test('get log level', async t => {
|
|
79
|
+
const plan = tspl(t, { plan: 2 })
|
|
80
|
+
|
|
81
|
+
const stream = sink()
|
|
82
|
+
const logger = pino({
|
|
83
|
+
hooks: {
|
|
84
|
+
logMethod (args, method, level) {
|
|
85
|
+
plan.equal(typeof level, 'number')
|
|
86
|
+
plan.equal(level, this.levels.values.error)
|
|
87
|
+
|
|
88
|
+
method.apply(this, [args.join('-')])
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}, stream)
|
|
92
|
+
|
|
93
|
+
const o = once(stream, 'data')
|
|
94
|
+
logger.error('a')
|
|
95
|
+
match(await o, { msg: 'a' })
|
|
96
|
+
})
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
describe('streamWrite hook', () => {
|
|
100
|
+
test('gets invoked', async () => {
|
|
101
|
+
const stream = sink()
|
|
102
|
+
const logger = pino({
|
|
103
|
+
hooks: {
|
|
104
|
+
streamWrite (s) {
|
|
105
|
+
return s.replaceAll('redact-me', 'XXX')
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}, stream)
|
|
109
|
+
|
|
110
|
+
const o = once(stream, 'data')
|
|
111
|
+
logger.info('hide redact-me in this string')
|
|
112
|
+
match(await o, { msg: 'hide XXX in this string' })
|
|
113
|
+
})
|
|
114
|
+
})
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const test = require('node:test')
|
|
4
|
+
const http = require('node:http')
|
|
5
|
+
const os = require('node:os')
|
|
6
|
+
const tspl = require('@matteo.collina/tspl')
|
|
7
|
+
|
|
8
|
+
const { sink, once } = require('./helper')
|
|
9
|
+
const pino = require('../')
|
|
10
|
+
|
|
11
|
+
const { pid } = process
|
|
12
|
+
const hostname = os.hostname()
|
|
13
|
+
|
|
14
|
+
test('http request support', async (t) => {
|
|
15
|
+
const plan = tspl(t, { plan: 3 })
|
|
16
|
+
let originalReq
|
|
17
|
+
const instance = pino(sink((chunk, enc) => {
|
|
18
|
+
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
|
19
|
+
delete chunk.time
|
|
20
|
+
plan.deepEqual(chunk, {
|
|
21
|
+
pid,
|
|
22
|
+
hostname,
|
|
23
|
+
level: 30,
|
|
24
|
+
msg: 'my request',
|
|
25
|
+
req: {
|
|
26
|
+
method: originalReq.method,
|
|
27
|
+
url: originalReq.url,
|
|
28
|
+
headers: originalReq.headers,
|
|
29
|
+
remoteAddress: originalReq.socket.remoteAddress,
|
|
30
|
+
remotePort: originalReq.socket.remotePort
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
}))
|
|
34
|
+
|
|
35
|
+
const server = http.createServer((req, res) => {
|
|
36
|
+
originalReq = req
|
|
37
|
+
instance.info(req, 'my request')
|
|
38
|
+
res.end('hello')
|
|
39
|
+
})
|
|
40
|
+
server.unref()
|
|
41
|
+
server.listen()
|
|
42
|
+
const err = await once(server, 'listening')
|
|
43
|
+
plan.equal(err, undefined)
|
|
44
|
+
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
|
45
|
+
res.resume()
|
|
46
|
+
server.close()
|
|
47
|
+
|
|
48
|
+
await plan
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('http request support via serializer', async (t) => {
|
|
52
|
+
const plan = tspl(t, { plan: 3 })
|
|
53
|
+
let originalReq
|
|
54
|
+
const instance = pino({
|
|
55
|
+
serializers: {
|
|
56
|
+
req: pino.stdSerializers.req
|
|
57
|
+
}
|
|
58
|
+
}, sink((chunk, enc) => {
|
|
59
|
+
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
|
60
|
+
delete chunk.time
|
|
61
|
+
plan.deepEqual(chunk, {
|
|
62
|
+
pid,
|
|
63
|
+
hostname,
|
|
64
|
+
level: 30,
|
|
65
|
+
msg: 'my request',
|
|
66
|
+
req: {
|
|
67
|
+
method: originalReq.method,
|
|
68
|
+
url: originalReq.url,
|
|
69
|
+
headers: originalReq.headers,
|
|
70
|
+
remoteAddress: originalReq.socket.remoteAddress,
|
|
71
|
+
remotePort: originalReq.socket.remotePort
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
}))
|
|
75
|
+
|
|
76
|
+
const server = http.createServer(function (req, res) {
|
|
77
|
+
originalReq = req
|
|
78
|
+
instance.info({ req }, 'my request')
|
|
79
|
+
res.end('hello')
|
|
80
|
+
})
|
|
81
|
+
server.unref()
|
|
82
|
+
server.listen()
|
|
83
|
+
const err = await once(server, 'listening')
|
|
84
|
+
plan.equal(err, undefined)
|
|
85
|
+
|
|
86
|
+
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
|
87
|
+
res.resume()
|
|
88
|
+
server.close()
|
|
89
|
+
|
|
90
|
+
await plan
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
test('http response support', async (t) => {
|
|
94
|
+
const plan = tspl(t, { plan: 3 })
|
|
95
|
+
let originalRes
|
|
96
|
+
const instance = pino(sink((chunk, enc) => {
|
|
97
|
+
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
|
98
|
+
delete chunk.time
|
|
99
|
+
plan.deepEqual(chunk, {
|
|
100
|
+
pid,
|
|
101
|
+
hostname,
|
|
102
|
+
level: 30,
|
|
103
|
+
msg: 'my response',
|
|
104
|
+
res: {
|
|
105
|
+
statusCode: originalRes.statusCode,
|
|
106
|
+
headers: originalRes.getHeaders()
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
}))
|
|
110
|
+
|
|
111
|
+
const server = http.createServer(function (req, res) {
|
|
112
|
+
originalRes = res
|
|
113
|
+
res.end('hello')
|
|
114
|
+
instance.info(res, 'my response')
|
|
115
|
+
})
|
|
116
|
+
server.unref()
|
|
117
|
+
server.listen()
|
|
118
|
+
const err = await once(server, 'listening')
|
|
119
|
+
|
|
120
|
+
plan.equal(err, undefined)
|
|
121
|
+
|
|
122
|
+
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
|
123
|
+
res.resume()
|
|
124
|
+
server.close()
|
|
125
|
+
|
|
126
|
+
await plan
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
test('http response support via a serializer', async (t) => {
|
|
130
|
+
const plan = tspl(t, { plan: 3 })
|
|
131
|
+
const instance = pino({
|
|
132
|
+
serializers: {
|
|
133
|
+
res: pino.stdSerializers.res
|
|
134
|
+
}
|
|
135
|
+
}, sink((chunk, enc) => {
|
|
136
|
+
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
|
137
|
+
delete chunk.time
|
|
138
|
+
plan.deepEqual(chunk, {
|
|
139
|
+
pid,
|
|
140
|
+
hostname,
|
|
141
|
+
level: 30,
|
|
142
|
+
msg: 'my response',
|
|
143
|
+
res: {
|
|
144
|
+
statusCode: 200,
|
|
145
|
+
headers: {
|
|
146
|
+
'x-single': 'y',
|
|
147
|
+
'x-multi': [1, 2]
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
}))
|
|
152
|
+
|
|
153
|
+
const server = http.createServer(function (req, res) {
|
|
154
|
+
res.setHeader('x-single', 'y')
|
|
155
|
+
res.setHeader('x-multi', [1, 2])
|
|
156
|
+
res.end('hello')
|
|
157
|
+
instance.info({ res }, 'my response')
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
server.unref()
|
|
161
|
+
server.listen()
|
|
162
|
+
const err = await once(server, 'listening')
|
|
163
|
+
plan.equal(err, undefined)
|
|
164
|
+
|
|
165
|
+
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
|
166
|
+
res.resume()
|
|
167
|
+
server.close()
|
|
168
|
+
|
|
169
|
+
await plan
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
test('http request support via serializer in a child', async (t) => {
|
|
173
|
+
const plan = tspl(t, { plan: 3 })
|
|
174
|
+
let originalReq
|
|
175
|
+
const instance = pino({
|
|
176
|
+
serializers: {
|
|
177
|
+
req: pino.stdSerializers.req
|
|
178
|
+
}
|
|
179
|
+
}, sink((chunk, enc) => {
|
|
180
|
+
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
|
181
|
+
delete chunk.time
|
|
182
|
+
plan.deepEqual(chunk, {
|
|
183
|
+
pid,
|
|
184
|
+
hostname,
|
|
185
|
+
level: 30,
|
|
186
|
+
msg: 'my request',
|
|
187
|
+
req: {
|
|
188
|
+
method: originalReq.method,
|
|
189
|
+
url: originalReq.url,
|
|
190
|
+
headers: originalReq.headers,
|
|
191
|
+
remoteAddress: originalReq.socket.remoteAddress,
|
|
192
|
+
remotePort: originalReq.socket.remotePort
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
}))
|
|
196
|
+
|
|
197
|
+
const server = http.createServer(function (req, res) {
|
|
198
|
+
originalReq = req
|
|
199
|
+
const child = instance.child({ req })
|
|
200
|
+
child.info('my request')
|
|
201
|
+
res.end('hello')
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
server.unref()
|
|
205
|
+
server.listen()
|
|
206
|
+
const err = await once(server, 'listening')
|
|
207
|
+
plan.equal(err, undefined)
|
|
208
|
+
|
|
209
|
+
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
|
210
|
+
res.resume()
|
|
211
|
+
server.close()
|
|
212
|
+
|
|
213
|
+
await plan
|
|
214
|
+
})
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const test = require('node:test')
|
|
4
|
+
const assert = require('node:assert')
|
|
5
|
+
const fs = require('node:fs')
|
|
6
|
+
const path = require('node:path')
|
|
7
|
+
|
|
8
|
+
const pino = require('../..')()
|
|
9
|
+
|
|
10
|
+
test('should be the same as package.json', () => {
|
|
11
|
+
const json = JSON.parse(
|
|
12
|
+
fs.readFileSync(path.join(__dirname, '..', '..', 'package.json'))
|
|
13
|
+
.toString('utf8')
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
assert.equal(pino.version, json.version)
|
|
17
|
+
})
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { describe, test } = require('node:test')
|
|
4
|
+
const assert = require('node:assert')
|
|
5
|
+
|
|
6
|
+
const pino = require('../')
|
|
7
|
+
|
|
8
|
+
const descLevels = {
|
|
9
|
+
trace: 60,
|
|
10
|
+
debug: 50,
|
|
11
|
+
info: 40,
|
|
12
|
+
warn: 30,
|
|
13
|
+
error: 20,
|
|
14
|
+
fatal: 10
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const ascLevels = {
|
|
18
|
+
trace: 10,
|
|
19
|
+
debug: 20,
|
|
20
|
+
info: 30,
|
|
21
|
+
warn: 40,
|
|
22
|
+
error: 50,
|
|
23
|
+
fatal: 60
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe('Default levels suite', () => {
|
|
27
|
+
test('can check if current level enabled', async () => {
|
|
28
|
+
const log = pino({ level: 'debug' })
|
|
29
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('can check if level enabled after level set', async () => {
|
|
33
|
+
const log = pino()
|
|
34
|
+
assert.equal(false, log.isLevelEnabled('debug'))
|
|
35
|
+
log.level = 'debug'
|
|
36
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('can check if higher level enabled', async () => {
|
|
40
|
+
const log = pino({ level: 'debug' })
|
|
41
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('can check if lower level is disabled', async () => {
|
|
45
|
+
const log = pino({ level: 'error' })
|
|
46
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test('ASC: can check if child has current level enabled', async () => {
|
|
50
|
+
const log = pino().child({}, { level: 'debug' })
|
|
51
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
52
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
53
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test('can check if custom level is enabled', async () => {
|
|
57
|
+
const log = pino({
|
|
58
|
+
customLevels: { foo: 35 },
|
|
59
|
+
level: 'debug'
|
|
60
|
+
})
|
|
61
|
+
assert.equal(true, log.isLevelEnabled('foo'))
|
|
62
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
63
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
describe('Ascending levels suite', () => {
|
|
68
|
+
const customLevels = ascLevels
|
|
69
|
+
const levelComparison = 'ASC'
|
|
70
|
+
|
|
71
|
+
test('can check if current level enabled', async () => {
|
|
72
|
+
const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
73
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('can check if level enabled after level set', async () => {
|
|
77
|
+
const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
78
|
+
assert.equal(false, log.isLevelEnabled('debug'))
|
|
79
|
+
log.level = 'debug'
|
|
80
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
test('can check if higher level enabled', async () => {
|
|
84
|
+
const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
85
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test('can check if lower level is disabled', async () => {
|
|
89
|
+
const log = pino({ level: 'error', customLevels, useOnlyCustomLevels: true })
|
|
90
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
test('can check if child has current level enabled', async () => {
|
|
94
|
+
const log = pino().child({ levelComparison, customLevels, useOnlyCustomLevels: true }, { level: 'debug' })
|
|
95
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
96
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
97
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test('can check if custom level is enabled', async () => {
|
|
101
|
+
const log = pino({
|
|
102
|
+
levelComparison,
|
|
103
|
+
useOnlyCustomLevels: true,
|
|
104
|
+
customLevels: { foo: 35, ...customLevels },
|
|
105
|
+
level: 'debug'
|
|
106
|
+
})
|
|
107
|
+
assert.equal(true, log.isLevelEnabled('foo'))
|
|
108
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
109
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
110
|
+
})
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
describe('Descending levels suite', () => {
|
|
114
|
+
const customLevels = descLevels
|
|
115
|
+
const levelComparison = 'DESC'
|
|
116
|
+
|
|
117
|
+
test('can check if current level enabled', async () => {
|
|
118
|
+
const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
119
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
test('can check if level enabled after level set', async () => {
|
|
123
|
+
const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
124
|
+
assert.equal(false, log.isLevelEnabled('debug'))
|
|
125
|
+
log.level = 'debug'
|
|
126
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
test('can check if higher level enabled', async () => {
|
|
130
|
+
const log = pino({ level: 'debug', levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
131
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
test('can check if lower level is disabled', async () => {
|
|
135
|
+
const log = pino({ level: 'error', levelComparison, customLevels, useOnlyCustomLevels: true })
|
|
136
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
test('can check if child has current level enabled', async () => {
|
|
140
|
+
const log = pino({ levelComparison, customLevels, useOnlyCustomLevels: true }).child({}, { level: 'debug' })
|
|
141
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
142
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
143
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
test('can check if custom level is enabled', async () => {
|
|
147
|
+
const log = pino({
|
|
148
|
+
levelComparison,
|
|
149
|
+
customLevels: { foo: 35, ...customLevels },
|
|
150
|
+
useOnlyCustomLevels: true,
|
|
151
|
+
level: 'debug'
|
|
152
|
+
})
|
|
153
|
+
assert.equal(true, log.isLevelEnabled('foo'))
|
|
154
|
+
assert.equal(true, log.isLevelEnabled('error'))
|
|
155
|
+
assert.equal(false, log.isLevelEnabled('trace'))
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
describe('Custom levels comparison', () => {
|
|
160
|
+
test('Custom comparison returns true cause level is enabled', async () => {
|
|
161
|
+
const log = pino({ level: 'error', levelComparison: () => true })
|
|
162
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
test('Custom comparison returns false cause level is disabled', async () => {
|
|
166
|
+
const log = pino({ level: 'error', levelComparison: () => false })
|
|
167
|
+
assert.equal(false, log.isLevelEnabled('debug'))
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
test('Custom comparison returns true cause child level is enabled', async () => {
|
|
171
|
+
const log = pino({ levelComparison: () => true }).child({ level: 'error' })
|
|
172
|
+
assert.equal(true, log.isLevelEnabled('debug'))
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
test('Custom comparison returns false cause child level is disabled', async () => {
|
|
176
|
+
const log = pino({ levelComparison: () => false }).child({ level: 'error' })
|
|
177
|
+
assert.equal(false, log.isLevelEnabled('debug'))
|
|
178
|
+
})
|
|
179
|
+
})
|