Skip to content

Commit b6f8be4

Browse files
authored
feat: support configurable log levels (nodeshift#82)
* feat: support for configurable log levels * chore: rename log param to logLevel * docs: add logging example to docs
1 parent b37183b commit b6f8be4

File tree

4 files changed

+43
-35
lines changed

4 files changed

+43
-35
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ In my current working directory, I have an `index.js` file like this.
2626

2727
```js
2828
const framework = require('faas-js-runtime');
29+
const options = {
30+
// Pino is used as the logger implementation. Supported log levels are
31+
// documented at this link:
32+
// https://github.com/pinojs/pino/blob/master/docs/api.md#options
33+
logLevel: 'info'
34+
}
2935

3036
// My function directory is in ./function-dir
3137
framework(require(`${__dirname}/function-dir/`), server => {
@@ -36,7 +42,7 @@ framework(require(`${__dirname}/function-dir/`), server => {
3642

3743
// Whenever you want to shutdown the framework
3844
server.close();
39-
});
45+
}, options);
4046
```
4147

4248
In `./function-dir`, there is an `index.js` file that looks
@@ -47,6 +53,7 @@ module.exports = async function myFunction(context) {
4753
const ret = 'This is a test function for Node.js FaaS. Success.';
4854
return new Promise((resolve, reject) => {
4955
setTimeout(_ => {
56+
context.log.info('sending response to client')
5057
resolve(ret);
5158
}, 500);
5259
});

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ function start(func, port, cb, options) {
2121
port = DEFAULT_PORT;
2222
break;
2323
}
24-
const { log = true } = { ...options };
24+
const { logLevel = 'info' } = { ...options };
2525

26-
const server = fastify({ logger: log });
26+
const server = fastify({ logger: { level: logLevel } });
2727

2828
// All incoming requests get a Context object
2929
server.decorateRequest('fcontext');

test/test-context.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ test('Provides HTTP request headers with the context parameter', t => {
1414
t.end();
1515
server.close();
1616
});
17-
}, { log: false });
17+
}, { logLevel: 'silent' });
1818
});
1919

2020
test('Provides HTTP request body with the context parameter', t => {
@@ -30,7 +30,7 @@ test('Provides HTTP request body with the context parameter', t => {
3030
t.end();
3131
server.close();
3232
});
33-
}, { log: false });
33+
}, { logLevel: 'silent' });
3434
});
3535

3636
test('Provides HTTP request query parameters with the context parameter', t => {
@@ -48,7 +48,7 @@ test('Provides HTTP request query parameters with the context parameter', t => {
4848
t.end();
4949
server.close();
5050
});
51-
}, { log: false });
51+
}, { logLevel: 'silent' });
5252
});
5353

5454
test('Provides HTTP method information with the context parameter', t => {
@@ -61,7 +61,7 @@ test('Provides HTTP method information with the context parameter', t => {
6161
t.equal(context.method, 'GET');
6262
t.end();
6363
server.close();
64-
}), { log: false });
64+
}), { logLevel: 'silent' });
6565
});
6666

6767
test('Provides HTTP version information with the context parameter', t => {
@@ -76,6 +76,6 @@ test('Provides HTTP version information with the context parameter', t => {
7676
t.equal(context.httpVersionMinor, 1);
7777
t.end();
7878
server.close();
79-
}), { log: false });
79+
}), { logLevel: 'silent' });
8080
});
8181

test/test.js

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ test('Loads a user function with dependencies', t => {
4242
t.end();
4343
server.close();
4444
});
45-
}, { log: false });
45+
}, { logLevel: 'silent' });
4646
});
4747

4848
test('Can respond via an async function', t => {
@@ -60,7 +60,7 @@ test('Can respond via an async function', t => {
6060
t.end();
6161
server.close();
6262
});
63-
}, { log: false });
63+
}, { logLevel: 'silent' });
6464
});
6565

6666
test('Accepts HTTP POST requests', t => {
@@ -77,7 +77,7 @@ test('Accepts HTTP POST requests', t => {
7777
t.end();
7878
server.close();
7979
});
80-
}, { log: false });
80+
}, { logLevel: 'silent' });
8181
});
8282

8383
test('Responds to 0.3 binary cloud events', t => {
@@ -98,7 +98,7 @@ test('Responds to 0.3 binary cloud events', t => {
9898
t.end();
9999
server.close();
100100
});
101-
}, { log: false });
101+
}, { logLevel: 'silent' });
102102
});
103103

104104
test('Responds with 0.3 binary cloud event', t => {
@@ -123,7 +123,7 @@ test('Responds with 0.3 binary cloud event', t => {
123123
t.end();
124124
server.close();
125125
});
126-
}, { log: false });
126+
}, { logLevel: 'silent' });
127127
});
128128

129129
test('Responds to 1.0 binary cloud events', t => {
@@ -144,7 +144,7 @@ test('Responds to 1.0 binary cloud events', t => {
144144
t.end();
145145
server.close();
146146
});
147-
}, { log: false });
147+
}, { logLevel: 'silent' });
148148
});
149149

150150
test('Responds to 1.0 structured cloud events', t => {
@@ -170,7 +170,7 @@ test('Responds to 1.0 structured cloud events', t => {
170170
t.end();
171171
server.close();
172172
});
173-
}, { log: false });
173+
}, { logLevel: 'silent' });
174174
});
175175

176176
test('Handles 1.0 CloudEvent responses', t => {
@@ -196,7 +196,7 @@ test('Handles 1.0 CloudEvent responses', t => {
196196
server.close();
197197
});
198198
},
199-
{ log: false });
199+
{ logLevel: 'silent' });
200200
});
201201

202202
test('Handles 1.0 CloudEvent Message responses', t => {
@@ -222,7 +222,7 @@ test('Handles 1.0 CloudEvent Message responses', t => {
222222
server.close();
223223
});
224224
},
225-
{ log: false });
225+
{ logLevel: 'silent' });
226226
});
227227

228228
test('Extracts event data as the second parameter to a function', t => {
@@ -252,7 +252,7 @@ test('Extracts event data as the second parameter to a function', t => {
252252
t.end();
253253
server.close();
254254
});
255-
}, { log: false });
255+
}, { logLevel: 'silent' });
256256
});
257257

258258
test('Successfully handles events with no data', t => {
@@ -275,7 +275,7 @@ test('Successfully handles events with no data', t => {
275275
t.end();
276276
server.close();
277277
});
278-
}, { log: false });
278+
}, { logLevel: 'silent' });
279279
});
280280

281281
test('Responds with 406 Not Acceptable to unknown cloud event versions', t => {
@@ -297,7 +297,7 @@ test('Responds with 406 Not Acceptable to unknown cloud event versions', t => {
297297
t.end();
298298
server.close();
299299
});
300-
}, { log: false });
300+
}, { logLevel: 'silent' });
301301
});
302302

303303
test('Respects response code set by the function', t => {
@@ -313,7 +313,7 @@ test('Respects response code set by the function', t => {
313313
t.end();
314314
server.close();
315315
});
316-
}, { log: false });
316+
}, { logLevel: 'silent' });
317317
});
318318

319319
test('Responds HTTP 204 if response body has no content', t => {
@@ -330,7 +330,7 @@ test('Responds HTTP 204 if response body has no content', t => {
330330
t.end();
331331
server.close();
332332
});
333-
}, { log: false });
333+
}, { logLevel: 'silent' });
334334
});
335335

336336
test('Sends CORS headers in HTTP response', t => {
@@ -350,7 +350,7 @@ test('Sends CORS headers in HTTP response', t => {
350350
t.end();
351351
server.close();
352352
});
353-
}, { log: false });
353+
}, { logLevel: 'silent' });
354354
});
355355

356356
test('Respects headers set by the function', t => {
@@ -367,7 +367,7 @@ test('Respects headers set by the function', t => {
367367
t.end();
368368
server.close();
369369
});
370-
}, { log: false });
370+
}, { logLevel: 'silent' });
371371
});
372372

373373
test('Respects content type set by the function', t => {
@@ -384,7 +384,7 @@ test('Respects content type set by the function', t => {
384384
t.end();
385385
server.close();
386386
});
387-
}, { log: false });
387+
}, { logLevel: 'silent' });
388388
});
389389

390390
test('Accepts application/json content via HTTP post', t => {
@@ -403,7 +403,7 @@ test('Accepts application/json content via HTTP post', t => {
403403
t.end();
404404
server.close();
405405
});
406-
}, { log: false });
406+
}, { logLevel: 'silent' });
407407
});
408408

409409
test('Accepts x-www-form-urlencoded content via HTTP post', t => {
@@ -422,7 +422,7 @@ test('Accepts x-www-form-urlencoded content via HTTP post', t => {
422422
t.end();
423423
server.close();
424424
});
425-
}, { log: false });
425+
}, { logLevel: 'silent' });
426426
});
427427

428428
test('Exposes readiness URL', t => {
@@ -438,7 +438,7 @@ test('Exposes readiness URL', t => {
438438
t.end();
439439
server.close();
440440
});
441-
}, { log: false });
441+
}, { logLevel: 'silent' });
442442
});
443443

444444
test('Exposes liveness URL', t => {
@@ -454,7 +454,7 @@ test('Exposes liveness URL', t => {
454454
t.end();
455455
server.close();
456456
});
457-
}, { log: false });
457+
}, { logLevel: 'silent' });
458458
});
459459

460460
test('Returns HTTP error code if a caught error has one', t => {
@@ -473,7 +473,7 @@ test('Returns HTTP error code if a caught error has one', t => {
473473
t.end();
474474
server.close();
475475
});
476-
}, { log: false });
476+
}, { logLevel: 'silent' });
477477
});
478478

479479
test('Function accepts destructured parameters', t => {
@@ -490,13 +490,14 @@ test('Function accepts destructured parameters', t => {
490490
t.end();
491491
server.close();
492492
});
493-
}, { log: false });
493+
}, { logLevel: 'silent' });
494494
});
495495

496-
test('Provides logger in context when logging is enabled', t => {
496+
test('Provides logger with appropriate log level configured', t => {
497497
var loggerProvided = false;
498+
const logLevel = 'error'
498499
framework(context => {
499-
loggerProvided = (context.log && typeof context.log.info === 'function');
500+
loggerProvided = (context.log && typeof context.log.info === 'function' && context.log.level === logLevel);
500501
}, server => {
501502
request(server)
502503
.get('/')
@@ -506,7 +507,7 @@ test('Provides logger in context when logging is enabled', t => {
506507
t.end();
507508
server.close();
508509
});
509-
}, { log: {level: 'error'}}); // enable but squelch
510+
}, { logLevel }); // enable but squelch
510511
});
511512

512513
test('Provides logger in context when logging is disabled', t => {
@@ -522,6 +523,6 @@ test('Provides logger in context when logging is disabled', t => {
522523
t.end();
523524
server.close();
524525
});
525-
}, { log: false});
526+
}, { logLevel: 'silent' });
526527
});
527528

0 commit comments

Comments
 (0)