Skip to content

Commit 31a3a70

Browse files
committed
refactor logger initialization in benchmark tests to use new Logger class
1 parent 94d24a2 commit 31a3a70

File tree

2 files changed

+156
-36
lines changed

2 files changed

+156
-36
lines changed

benchmark/logger/basic-json.js

Lines changed: 151 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,173 @@
11
'use strict';
22

33
const common = require('../common');
4-
const { createLogger, JSONHandler } = require('node:logger');
54
const fs = require('node:fs');
65

76
const bench = common.createBenchmark(main, {
87
n: [1e5],
9-
level: ['info', 'debug'],
10-
fields: [0, 5],
11-
type: ['simple', 'child', 'disabled'],
8+
scenario: [
9+
'string-short',
10+
'string-long',
11+
'object-simple',
12+
'object-nested',
13+
'object-array',
14+
'object-mixed',
15+
'child-logger',
16+
'disabled-level',
17+
'error-object',
18+
],
1219
});
1320

14-
function main({ n, level, fields, type }) {
15-
// Use /dev/null to avoid I/O overhead in benchmarks
21+
function main({ n, scenario }) {
22+
const { Logger, JSONConsumer } = require('node:logger');
23+
1624
const nullFd = fs.openSync('/dev/null', 'w');
17-
const handler = new JSONHandler({ stream: nullFd, level: 'info' });
18-
const logger = createLogger({ handler, level });
25+
const consumer = new JSONConsumer({ stream: nullFd, level: 'info' });
26+
consumer.attach();
1927

20-
// Create test data based on fields count
21-
const logData = { msg: 'benchmark test message' };
22-
for (let i = 0; i < fields; i++) {
23-
logData[`field${i}`] = `value${i}`;
24-
}
28+
const logger = new Logger({ level: 'info' });
29+
30+
switch (scenario) {
31+
case 'string-short': {
32+
// Simple short string message
33+
bench.start();
34+
for (let i = 0; i < n; i++) {
35+
logger.info('hello');
36+
}
37+
bench.end(n);
38+
break;
39+
}
40+
41+
case 'string-long': {
42+
// Long string message (100 chars)
43+
const longMsg = 'This is a much longer log message that contains more text to serialize and process during logging operations';
44+
bench.start();
45+
for (let i = 0; i < n; i++) {
46+
logger.info(longMsg);
47+
}
48+
bench.end(n);
49+
break;
50+
}
2551

26-
let testLogger;
27-
switch (type) {
28-
case 'simple':
29-
testLogger = logger;
52+
case 'object-simple': {
53+
// Object with msg and a few string fields
54+
bench.start();
55+
for (let i = 0; i < n; i++) {
56+
logger.info({
57+
msg: 'user action',
58+
userId: 'user-123',
59+
action: 'login',
60+
});
61+
}
62+
bench.end(n);
3063
break;
31-
case 'child':
32-
testLogger = logger.child({ requestId: 'bench-123', userId: 456 });
64+
}
65+
66+
case 'object-nested': {
67+
// Object with nested structure
68+
bench.start();
69+
for (let i = 0; i < n; i++) {
70+
logger.info({
71+
msg: 'request completed',
72+
request: {
73+
method: 'POST',
74+
path: '/api/users',
75+
headers: {
76+
'content-type': 'application/json',
77+
'user-agent': 'Mozilla/5.0',
78+
},
79+
},
80+
response: {
81+
statusCode: 200,
82+
body: { success: true },
83+
},
84+
});
85+
}
86+
bench.end(n);
3387
break;
34-
case 'disabled': {
35-
// When level is debug and handler is info, logs will be disabled
36-
const nullFd2 = fs.openSync('/dev/null', 'w');
88+
}
3789

38-
testLogger = createLogger({
39-
handler: new JSONHandler({ stream: nullFd2, level: 'warn' }),
40-
level: 'debug',
90+
case 'object-array': {
91+
// Object with array fields
92+
const tags = ['web', 'api', 'auth', 'production'];
93+
const ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
94+
bench.start();
95+
for (let i = 0; i < n; i++) {
96+
logger.info({
97+
msg: 'batch operation',
98+
tags,
99+
processedIds: ids,
100+
results: ['success', 'success', 'failed', 'success'],
101+
});
102+
}
103+
bench.end(n);
104+
break;
105+
}
106+
107+
case 'object-mixed': {
108+
// Mixed types: strings, numbers, booleans, null
109+
bench.start();
110+
for (let i = 0; i < n; i++) {
111+
logger.info({
112+
msg: 'mixed data',
113+
stringField: 'value',
114+
numberField: 42,
115+
floatField: 3.14159,
116+
booleanField: true,
117+
nullField: null,
118+
timestamp: 1704067200000,
119+
});
120+
}
121+
bench.end(n);
122+
break;
123+
}
124+
125+
case 'child-logger': {
126+
// Child logger with pre-bound context
127+
const childLogger = logger.child({
128+
service: 'api',
129+
version: '1.0.0',
130+
env: 'production',
41131
});
132+
bench.start();
133+
for (let i = 0; i < n; i++) {
134+
childLogger.info({
135+
msg: 'request',
136+
requestId: 'req-123',
137+
duration: 150,
138+
});
139+
}
140+
bench.end(n);
42141
break;
43142
}
44-
}
45143

46-
bench.start();
47-
for (let i = 0; i < n; i++) {
48-
testLogger.info(logData);
144+
case 'disabled-level': {
145+
// Logging at disabled level (debug when level is info)
146+
bench.start();
147+
for (let i = 0; i < n; i++) {
148+
logger.debug('this will be skipped');
149+
}
150+
bench.end(n);
151+
break;
152+
}
153+
154+
case 'error-object': {
155+
// Logging with Error object
156+
const error = new Error('Something went wrong');
157+
error.code = 'ERR_SOMETHING';
158+
bench.start();
159+
for (let i = 0; i < n; i++) {
160+
logger.error({
161+
msg: 'operation failed',
162+
err: error,
163+
operation: 'database-query',
164+
});
165+
}
166+
bench.end(n);
167+
break;
168+
}
49169
}
50-
bench.end(n);
51170

52-
handler.end();
171+
consumer.flushSync();
172+
fs.closeSync(nullFd);
53173
}

benchmark/logger/vs-pino.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ function main({ n, logger, scenario }) {
1515
let consumer;
1616

1717
if (logger === 'node-logger') {
18-
const { createLogger, JSONConsumer } = require('node:logger');
18+
const { Logger, JSONConsumer } = require('node:logger');
1919

2020
switch (scenario) {
2121
case 'simple': {
2222
consumer = new JSONConsumer({ stream: nullFd, level: 'info' });
2323
consumer.attach();
24-
testLogger = createLogger({ level: 'info' });
24+
testLogger = new Logger({ level: 'info' });
2525

2626
bench.start();
2727
for (let i = 0; i < n; i++) {
@@ -34,7 +34,7 @@ function main({ n, logger, scenario }) {
3434
case 'child': {
3535
consumer = new JSONConsumer({ stream: nullFd, level: 'info' });
3636
consumer.attach();
37-
const baseLogger = createLogger({ level: 'info' });
37+
const baseLogger = new Logger({ level: 'info' });
3838
testLogger = baseLogger.child({ requestId: 'req-123', userId: 456 });
3939

4040
bench.start();
@@ -48,7 +48,7 @@ function main({ n, logger, scenario }) {
4848
case 'disabled': {
4949
consumer = new JSONConsumer({ stream: nullFd, level: 'warn' });
5050
consumer.attach();
51-
testLogger = createLogger({ level: 'warn' });
51+
testLogger = new Logger({ level: 'warn' });
5252

5353
bench.start();
5454
for (let i = 0; i < n; i++) {
@@ -61,7 +61,7 @@ function main({ n, logger, scenario }) {
6161
case 'fields': {
6262
consumer = new JSONConsumer({ stream: nullFd, level: 'info' });
6363
consumer.attach();
64-
testLogger = createLogger({ level: 'info' });
64+
testLogger = new Logger({ level: 'info' });
6565

6666
bench.start();
6767
for (let i = 0; i < n; i++) {

0 commit comments

Comments
 (0)