UNPKG

@ts-ioc/logs

Version:

tsioc is AOP, Ioc container, via typescript decorator

121 lines (119 loc) 4.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const core_1 = require("@ts-ioc/core"); const aop_1 = require("@ts-ioc/aop"); /** * Log formater interface token. * it is a token id, you can register yourself formater for log. */ exports.LogFormaterToken = new core_1.InjectToken('DI_LogFormater'); let LogFormater = class LogFormater { constructor() { } format(joinPoint, message) { let pointMsg; switch (joinPoint.state) { case aop_1.JoinpointState.Before: case aop_1.JoinpointState.Pointcut: pointMsg = `${joinPoint.state} invoke method "${joinPoint.fullName}"\n with args: ${this.stringifyArgs(joinPoint.params, joinPoint.args)}.\n`; break; case aop_1.JoinpointState.After: pointMsg = `${joinPoint.state} invoke method "${joinPoint.fullName}".\n`; break; case aop_1.JoinpointState.AfterReturning: pointMsg = `Invoke method "${joinPoint.fullName}"\n returning value: ${this.stringify(joinPoint.returningValue)}.\n`; break; case aop_1.JoinpointState.AfterThrowing: pointMsg = `Invoke method "${joinPoint.fullName}"\n throw error: ${this.stringify(joinPoint.throwing)}.\n`; break; default: pointMsg = ''; break; } return this.joinMessage([pointMsg, message]); } stringifyArgs(params, args) { let argsStr = params.map((p, idx) => { let arg = args.length >= idx ? args[idx] : null; return ` <param name: "${p.name || ''}"> ${this.stringify(arg)}`; }).join(',\n'); if (argsStr) { return this.joinMessage([' [\n', argsStr, '\n]'], ''); } else { return '[]'; } } joinMessage(messgs, separator = '; ') { return messgs.filter(a => a).map(a => core_1.isString(a) ? a : a.toString()).join(separator); } stringifyArray(args) { if (!args.length) { return '[]'; } return '[\n' + args.map(arg => this.stringify(arg)).join(',\n') + '\n].'; } stringify(target) { let type = typeof target; let str = ''; switch (type) { case 'string': str = `"${target}"`; break; case 'boolean': str = target.toString(); break; case 'number': str = target.toString(); break; case 'symbol': str = target.toString(); break; case 'object': if (core_1.isNull(target)) { str = 'null'; } else if (core_1.isArray(target)) { str = this.stringifyArray(target); } else if (core_1.isDate(target)) { str = `[Date: ${target.toString()}]`; } else if (target instanceof core_1.Container) { str = `[${core_1.lang.getClassName(target)}]`; } else { str = `[${core_1.lang.getClassName(target)}: ${this.toJsonString(target)}]`; } break; default: if (core_1.isClass(target)) { str = `[class: ${core_1.lang.getClassName(target)}]`; } else if (core_1.isFunction(target)) { str = `[function: ${core_1.lang.getClassName(target)}]`; } break; } return str; } toJsonString(target) { try { return JSON.stringify(target); } catch (err) { return 'object'; } } static getClassAnnations() { return { "name": "LogFormater", "params": { "constructor": [], "format": ["joinPoint", "message"], "stringifyArgs": ["params", "args"], "joinMessage": ["messgs", "separator"], "stringifyArray": ["args"], "stringify": ["target"], "toJsonString": ["target"] } }; } }; LogFormater = tslib_1.__decorate([ aop_1.NonePointcut(), core_1.Singleton(exports.LogFormaterToken), tslib_1.__metadata("design:paramtypes", []) ], LogFormater); exports.LogFormater = LogFormater; //# sourceMappingURL=sourcemaps/LogFormater.js.map