UNPKG

@athenna/logger

Version:

The Athenna logging solution. Log in stdout, files and buckets.

50 lines (49 loc) 1.73 kB
/** * @athenna/logger * * (c) João Lenon <lenon@athenna.io> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ import { Color, Is } from '@athenna/common'; import { Formatter } from '#src/formatters/Formatter'; export class RequestFormatter extends Formatter { format(ctx) { if (Is.String(ctx)) { return ctx; } const statusCode = ctx.response.statusCode; const responseTimeMs = `${Math.round(ctx.response.responseTime)}ms`; const status = Color.statusCode(ctx.response.statusCode); const method = Color.httpMethod(ctx.request.method); const date = new Date().toISOString(); if (!this.configs.asJson) { return this.clean(`${method}${status} ${ctx.request.baseUrl} - ${date} - ${responseTimeMs}`); } const metadata = { method: ctx.request.method, duration: responseTimeMs, status: statusCode <= 399 ? 'SUCCESS' : 'ERROR', statusCode, url: ctx.request.hostUrl, path: ctx.request.baseUrl, createdAt: Date.now(), traceId: this.traceId(), data: ctx.data }; const request = { url: ctx.request.hostUrl, method: ctx.request.method, body: ctx.request.body, params: ctx.request.params, queries: ctx.request.queries, headers: ctx.request.headers }; const response = { body: ctx.response.body, headers: ctx.response.headers }; return JSON.stringify({ request, response, metadata }); } }