UNPKG

1.39 kBJavaScriptView Raw
1const util = require('util');
2const color = require('chalk');
3const { parse } = require('url');
4const stackParser = require('error-stack-parser');
5const httpstatus = require('http-status');
6
7const explain = require('./explainer');
8
9const displayStatusCode = statusCode =>
10 ({
11 2: color`{green ${statusCode}}`,
12 3: color`{cyan ${statusCode}}`,
13 4: color`{blue ${statusCode}}`
14 }[~~(statusCode / 100)]);
15
16class Logger {
17 static printRequestResponse(context) {
18 const { request, response, params } = context;
19 const { method } = request;
20 const { pathname, _query } = parse(context.request.url, true); // TODO Test perf vs RegEx
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
46module.exports = Logger;