kobp
Version:
Koa Boilerplate with MikroORM
110 lines • 4.39 kB
JavaScript
;
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;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Loggy = void 0;
const RequestContext_1 = require("./RequestContext");
const tracer_1 = require("./tracer");
const _stringify = (o) => (typeof o === 'string' || typeof o === 'number') ? `${o}` : JSON.stringify(o);
let Loggy = Loggy_1 = class Loggy extends tracer_1.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 = RequestContext_1.RequestRoomProvider.instanceOf(this);
if (!loggy) {
console.log(...messageParts);
}
else {
loggy.log(...messageParts);
}
}
// Usage
static error(message, error) {
const loggy = RequestContext_1.RequestRoomProvider.instanceOf(this);
if (!loggy) {
console.error(message, error);
}
else {
loggy.error(message, error);
}
}
static current() {
const loggy = RequestContext_1.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([
(0, RequestContext_1.RequestContextEnabled)('__TRC__')
], Loggy);
exports.Loggy = Loggy;
//# sourceMappingURL=loggy.js.map