1 | const util = require('util');
|
2 | const color = require('chalk');
|
3 | const { parse } = require('url');
|
4 | const stackParser = require('error-stack-parser');
|
5 | const httpstatus = require('http-status');
|
6 |
|
7 | const explain = require('./explainer');
|
8 |
|
9 | const displayStatusCode = statusCode =>
|
10 | ({
|
11 | 2: color`{green ${statusCode}}`,
|
12 | 3: color`{cyan ${statusCode}}`,
|
13 | 4: color`{blue ${statusCode}}`
|
14 | }[~~(statusCode / 100)]);
|
15 |
|
16 | class Logger {
|
17 | static printRequestResponse(context) {
|
18 | const { request, response, params } = context;
|
19 | const { method } = request;
|
20 | const { pathname, _query } = parse(context.request.url, true);
|
21 | const { statusCode } = response;
|
22 |
|
23 | console.log(
|
24 | color`┌ {magenta ${method}} {bold ${pathname}} → ${displayStatusCode(statusCode)} ${
|
25 | httpstatus[statusCode]
|
26 | }
|
27 | └ {gray Params}
|
28 | ${util.inspect(params, { compact: false, colors: true, sorted: true }).slice(2, -2)}`
|
29 | );
|
30 | }
|
31 |
|
32 | static printError(error, layer = 'General') {
|
33 | console.error(
|
34 | color` {bold.red Error} {bold.underline ${error.message}}
|
35 | {gray Explanation} \n ${explain.for(error)}
|
36 | \n {gray Stack trace}`
|
37 | );
|
38 |
|
39 | for (let message of stackParser.parse(error)) {
|
40 | console.error(color` - {yellow ${message.functionName}}
|
41 | {bold ${message.fileName}}:{bold.underline.cyan ${message.lineNumber}}`);
|
42 | }
|
43 | }
|
44 | }
|
45 |
|
46 | module.exports = Logger;
|