UNPKG

kobp

Version:
107 lines 4.23 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var Loggy_1; import { RequestContextEnabled, RequestRoomProvider } from './RequestContext'; import { Tracer } from './tracer'; const _stringify = (o) => (typeof o === 'string' || typeof o === 'number') ? `${o}` : JSON.stringify(o); let Loggy = Loggy_1 = class Loggy extends Tracer { constructor(ctx, printFn) { super(ctx); this._printLn = Loggy_1.customPrintLn ?? (Loggy_1.format === 'JSN' ? (c) => console.log(JSON.stringify(c)) : (c) => console.log(`${c.requestId} [${c.verdict} ${c.statusCode}] ${c.method} ${c.path}`, [c.message, c.error].filter(Boolean).join(' '))); } /** * Override the print function */ setPrintFn(printLn) { this._printLn = printLn; } success(...messageParts) { this._print({ finalized: true, message: messageParts.map((o) => _stringify(o)).join(' ') }); } failed(message, error) { this._print({ finalized: true, message, error: error || '(no-error-message)' }); } log(...messageParts) { this._print({ finalized: false, message: messageParts.map((o) => _stringify(o)).join(' ') }); } error(message, error) { this._print({ finalized: false, message, error: error || '(no-error-message)' }); } _print(msg) { const { error, message, finalized } = msg; const ctx = this.context; const headers = ctx.headers || {}; const errorMessage = (typeof error === 'string' && error) || (typeof error === 'object' && error.message) || ''; const ip = [...ctx.ips || [], ctx.ip].filter(Boolean); const path = ctx.request?.url; const method = ctx.request?.method; const user = ctx.user?.id; const statusCode = ctx.res.statusCode; const version = `${headers['x-version'] || ''}`; const app = `${headers['x-app'] || ''}`; const platform = `${headers['x-platform'] || ''}`; const payload = { requestId: this.traceId, user: user || null, app, version, platform, ip, path, method, statusCode: finalized ? statusCode : '000', message: message || undefined, error: errorMessage || undefined, verdict: finalized ? (!error ? 'OK' : 'ER') : 'PG', }; this._printLn(payload); } // Usage static log(...messageParts) { const loggy = RequestRoomProvider.instanceOf(this); if (!loggy) { console.log(...messageParts); } else { loggy.log(...messageParts); } } // Usage static error(message, error) { const loggy = RequestRoomProvider.instanceOf(this); if (!loggy) { console.error(message, error); } else { loggy.error(message, error); } } static current() { const loggy = RequestRoomProvider.instanceOf(this); return loggy; } /** * the dirty way to prematurly create the Loggy instance manually via middleware * so that the instance is being ready before the RequestContext is ready. */ static autoCreate(attachToContextKey) { return async function (ctx, next) { const loggy = new Loggy_1(ctx); ctx[attachToContextKey] = loggy; await next(); }; } }; Loggy.format = /JSO?N/i.test(`${process.env.LOGGY_FORMAT || 'JSN'}`) ? 'JSN' : 'TXT'; Loggy.customPrintLn = undefined; Loggy = Loggy_1 = __decorate([ RequestContextEnabled('__TRC__') ], Loggy); export { Loggy }; //# sourceMappingURL=loggy.js.map