@ts-ioc/logs
Version:
tsioc is AOP, Ioc container, via typescript decorator
121 lines (119 loc) • 4.49 kB
JavaScript
;
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