UNPKG

@ts-ioc/logs

Version:

tsioc is AOP, Ioc container, via typescript decorator

752 lines (646 loc) 23.4 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var tslib_1 = _interopDefault(require('tslib')); var core_1 = _interopDefault(require('@ts-ioc/core')); var aop_1 = _interopDefault(require('@ts-ioc/aop')); function unwrapExports (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var Level_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * log level items. * * @export * @enum {number} */ var Level; (function (Level) { Level["log"] = "log"; Level["trace"] = "trace"; Level["debug"] = "debug"; Level["info"] = "info"; Level["warn"] = "warn"; Level["error"] = "error"; Level["fatal"] = "fatal"; })(Level = exports.Level || (exports.Level = {})); /** * log levels * * @export * @enum {number} */ var Levels; (function (Levels) { Levels[Levels["trace"] = 0] = "trace"; Levels[Levels["debug"] = 1] = "debug"; Levels[Levels["info"] = 2] = "info"; Levels[Levels["warn"] = 3] = "warn"; Levels[Levels["error"] = 4] = "error"; Levels[Levels["fatal"] = 5] = "fatal"; })(Levels = exports.Levels || (exports.Levels = {})); }); unwrapExports(Level_1); var Level_2 = Level_1.Level; var Level_3 = Level_1.Levels; var ILoggerManager = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * LoggerManger interface token. * it is a token id, you can register yourself LoggerManger for this. */ exports.LoggerManagerToken = new core_1.InjectToken('DI_ILoggerManager'); }); unwrapExports(ILoggerManager); var ILoggerManager_1 = ILoggerManager.LoggerManagerToken; var IConfigureLoggerManager = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * IConfigureLoggerManager interface token. * it is a token id, you can register yourself IConfigureLoggerManager for this. */ exports.ConfigureLoggerManagerToken = new core_1.InjectToken('DI_IConfigureLoggerManager'); }); unwrapExports(IConfigureLoggerManager); var IConfigureLoggerManager_1 = IConfigureLoggerManager.ConfigureLoggerManagerToken; var LogConfigure = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * Log configure interface symbol. * it is a symbol id, you can register yourself LogConfigure for this. */ exports.LogConfigureToken = new core_1.InjectToken('DI_LogConfigure'); }); unwrapExports(LogConfigure); var LogConfigure_1 = LogConfigure.LogConfigureToken; var ConfigureLoggerManger_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * Configure logger manger. use to get configed logger manger. * * @export * @class LoggerManger * @implements {IConfigureLoggerManager} */ let ConfigureLoggerManger = class ConfigureLoggerManger { constructor(container, config) { this.container = container; this.setLogConfigure(config); } get config() { if (!this._config) { if (this.container.has(LogConfigure.LogConfigureToken)) { this._config = this.container.resolve(LogConfigure.LogConfigureToken); } else { this._config = { adapter: 'console' }; } } return this._config; } setLogConfigure(config) { if (!config) { return; } if (core_1.isClass(config)) { if (!this.container.has(LogConfigure.LogConfigureToken)) { this.container.register(LogConfigure.LogConfigureToken, config); this._config = this.container.get(LogConfigure.LogConfigureToken); } else if (!this.container.has(config)) { this.container.register(config); this._config = this.container.get(config); } } else { this._config = config; } this._logManger = null; } get logManger() { if (!this._logManger) { let cfg = this.config || {}; let adapter = cfg.adapter || 'console'; let token; if (core_1.isString(adapter)) { token = new core_1.Registration(ILoggerManager.LoggerManagerToken, adapter); } else { token = adapter; } this._logManger = this.container.get(token); if (cfg.config) { this._logManger.configure(cfg.config); } } return this._logManger; } configure(config) { this.logManger.configure(config); } getLogger(name) { return this.logManger.getLogger(name); } static getClassAnnations() { return { "name": "ConfigureLoggerManger", "params": { "constructor": ["container", "config"], "setLogConfigure": ["config"], "configure": ["config"], "getLogger": ["name"] } }; } }; ConfigureLoggerManger = tslib_1.__decorate([ aop_1.NonePointcut(), core_1.Injectable(IConfigureLoggerManager.ConfigureLoggerManagerToken), tslib_1.__param(0, core_1.Inject(core_1.ContainerToken)), tslib_1.__metadata("design:paramtypes", [Object, Object]) ], ConfigureLoggerManger); exports.ConfigureLoggerManger = ConfigureLoggerManger; }); unwrapExports(ConfigureLoggerManger_1); var ConfigureLoggerManger_2 = ConfigureLoggerManger_1.ConfigureLoggerManger; var ConsoleLogManager_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * console log manager. * * @export * @class ConsoleLogManager * @implements {ILoggerManager} */ let ConsoleLogManager = class ConsoleLogManager { constructor() { this.logger = new ConsoleLog(); } configure(config) { if (config && config.level) { this.logger.level = config.level; } } getLogger(name) { return this.logger; } static getClassAnnations() { return { "name": "ConsoleLogManager", "params": { "constructor": [], "configure": ["config"], "getLogger": ["name"] } }; } }; ConsoleLogManager = tslib_1.__decorate([ aop_1.NonePointcut(), core_1.Singleton(), core_1.Injectable(ILoggerManager.LoggerManagerToken, 'console'), tslib_1.__metadata("design:paramtypes", []) ], ConsoleLogManager); exports.ConsoleLogManager = ConsoleLogManager; /** * console log. * * @class ConsoleLog * @implements {ILogger} */ class ConsoleLog { constructor() { } log(message, ...args) { console.log(message, ...args); } trace(message, ...args) { if (!this.level || Level_1.Levels[this.level] === 0) { console.debug(message, ...args); } } debug(message, ...args) { // console.debug in nuix will not console. if (!this.level || Level_1.Levels[this.level] <= 1) { console.debug(message, ...args); } } info(message, ...args) { if (!this.level || Level_1.Levels[this.level] <= 2) { console.info(message, ...args); } } warn(message, ...args) { if (!this.level || Level_1.Levels[this.level] <= 3) { console.warn(message, ...args); } } error(message, ...args) { if (!this.level || Level_1.Levels[this.level] <= 4) { console.error(message, ...args); } } fatal(message, ...args) { if (!this.level || Level_1.Levels[this.level] <= 5) { console.error(message, ...args); } } static getClassAnnations() { return { "name": "ConsoleLog", "params": { "constructor": [], "log": ["message", "args"], "trace": ["message", "args"], "debug": ["message", "args"], "info": ["message", "args"], "warn": ["message", "args"], "error": ["message", "args"], "fatal": ["message", "args"] } }; } } }); unwrapExports(ConsoleLogManager_1); var ConsoleLogManager_2 = ConsoleLogManager_1.ConsoleLogManager; var LogFormater_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * 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; }); unwrapExports(LogFormater_1); var LogFormater_2 = LogFormater_1.LogFormaterToken; var LogFormater_3 = LogFormater_1.LogFormater; var LoggerAspect_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * base looger aspect. for extends your logger aspect. * * @export * @class LoggerAspect */ let LoggerAspect = class LoggerAspect { constructor(container, config) { this.container = container; this.config = config; } get logger() { if (!this._logger) { this._logger = this.logManger.getLogger(); } return this._logger; } get logManger() { if (!this._logManger) { this._logManger = this.container.resolve(IConfigureLoggerManager.ConfigureLoggerManagerToken, { config: this.config }); } return this._logManger; } processLog(joinPoint, annotation, message, level) { if (annotation && annotation.length) { annotation.forEach(logmeta => { let canlog = false; if (logmeta.express && logmeta.express(joinPoint)) { canlog = true; } else if (!logmeta.express) { canlog = true; } if (canlog) { this.writeLog(logmeta.logname ? this.logManger.getLogger(logmeta.logname) : this.logger, joinPoint, this.joinMessage(message, logmeta.message), logmeta.level || level); } }); } else { this.writeLog(this.logger, joinPoint, message, level); } } joinMessage(...messgs) { return messgs.filter(a => a).map(a => core_1.isString(a) ? a : a.toString()).join('; '); } writeLog(logger, joinPoint, message, level) { let formatStr = this.formatMessage(joinPoint, message); if (level) { logger[level](formatStr); } else { switch (joinPoint.state) { case aop_1.JoinpointState.Before: case aop_1.JoinpointState.After: case aop_1.JoinpointState.AfterReturning: logger.debug(formatStr); break; case aop_1.JoinpointState.Pointcut: logger.info(formatStr); break; case aop_1.JoinpointState.AfterThrowing: logger.error(formatStr); break; } } } formatMessage(joinPoint, message) { let config = this.logManger.config; let formater; config.format = config.format || LogFormater_1.LogFormaterToken; if (core_1.isToken(config.format)) { formater = this.container.getService(config.format, core_1.lang.getClass(this)); } else if (core_1.isFunction(config.format)) { formater = { format: config.format }; } else if (core_1.isObject(config.format) && core_1.isFunction(config.format.format)) { formater = config.format; } if (formater) { return formater.format(joinPoint, message); } return ''; } static getClassAnnations() { return { "name": "LoggerAspect", "params": { "constructor": ["container", "config"], "processLog": ["joinPoint", "annotation", "message", "level"], "joinMessage": ["messgs"], "writeLog": ["logger", "joinPoint", "message", "level"], "formatMessage": ["joinPoint", "message"] } }; } }; LoggerAspect = tslib_1.__decorate([ core_1.Abstract(), tslib_1.__metadata("design:paramtypes", [Object, Object]) ], LoggerAspect); exports.LoggerAspect = LoggerAspect; }); unwrapExports(LoggerAspect_1); var LoggerAspect_2 = LoggerAspect_1.LoggerAspect; var AnnotationLogerAspect_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * Annotation logger aspect. log for class or method with @Logger decorator. * * @export * @class AnnotationLogerAspect * @extends {LoggerAspect} */ let AnnotationLogerAspect = class AnnotationLogerAspect extends LoggerAspect_1.LoggerAspect { constructor(container) { super(container); } logging(joinPoint, annotation) { this.processLog(joinPoint, annotation); } static getClassAnnations() { return { "name": "AnnotationLogerAspect", "params": { "constructor": ["container"], "logging": ["joinPoint", "annotation"] } }; } }; tslib_1.__decorate([ aop_1.Pointcut('@annotation(Logger)', 'annotation'), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [aop_1.Joinpoint, Array]), tslib_1.__metadata("design:returntype", void 0) ], AnnotationLogerAspect.prototype, "logging", null); AnnotationLogerAspect = tslib_1.__decorate([ core_1.Singleton(), aop_1.Aspect(), tslib_1.__param(0, core_1.Inject(core_1.ContainerToken)), tslib_1.__metadata("design:paramtypes", [Object]) ], AnnotationLogerAspect); exports.AnnotationLogerAspect = AnnotationLogerAspect; }); unwrapExports(AnnotationLogerAspect_1); var AnnotationLogerAspect_2 = AnnotationLogerAspect_1.AnnotationLogerAspect; var Logger = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * Logger decorator, for method or class. * * @Logger */ exports.Logger = core_1.createClassMethodDecorator('Logger', adapter => { adapter.next({ isMetadata: (arg) => core_1.isClassMetadata(arg, 'logname'), match: (arg) => core_1.isString(arg), setMetadata: (metadata, arg) => { metadata.logname = arg; } }); adapter.next({ match: (arg) => core_1.isFunction(arg), setMetadata: (metadata, arg) => { metadata.express = arg; } }); adapter.next({ match: (arg) => core_1.isString(arg), setMetadata: (metadata, arg) => { metadata.message = arg; } }); adapter.next({ match: (arg) => core_1.isString(arg), setMetadata: (metadata, arg) => { metadata.level = Level_1.Level[arg]; } }); }); }); unwrapExports(Logger); var Logger_1 = Logger.Logger; var LogModule_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * aop logs ext for Ioc. auto run setup after registered. * with @IocExt('setup') decorator. * @export * @class LogModule */ let LogModule = class LogModule { constructor(container) { this.container = container; } /** * register aop for container. * * @memberof AopModule */ setup() { let container = this.container; if (!container.has(aop_1.AopModule)) { container.register(aop_1.AopModule); } let lifeScope = container.get(core_1.LifeScopeToken); lifeScope.registerDecorator(Logger.Logger, core_1.LifeState.onInit, core_1.CoreActions.bindParameterProviders); container.register(ConfigureLoggerManger_1.ConfigureLoggerManger); container.register(AnnotationLogerAspect_1.AnnotationLogerAspect); container.register(LogFormater_1.LogFormater); container.register(ConsoleLogManager_1.ConsoleLogManager); } static getClassAnnations() { return { "name": "LogModule", "params": { "constructor": ["container"], "setup": [] } }; } }; LogModule = tslib_1.__decorate([ core_1.IocExt('setup'), tslib_1.__param(0, core_1.Inject(core_1.ContainerToken)), tslib_1.__metadata("design:paramtypes", [Object]) ], LogModule); exports.LogModule = LogModule; }); unwrapExports(LogModule_1); var LogModule_2 = LogModule_1.LogModule; var DebugLogAspect_1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); /** * debug log aspect. * * @export * @class DebugLogAspect * @extends {LoggerAspect} */ let DebugLogAspect = class DebugLogAspect extends LoggerAspect_1.LoggerAspect { constructor(container) { super(container); } logging(joinPoint) { let level; switch (joinPoint.state) { case aop_1.JoinpointState.AfterThrowing: level = Level_1.Level.error; break; case aop_1.JoinpointState.AfterReturning: level = Level_1.Level.debug; break; case aop_1.JoinpointState.After: case aop_1.JoinpointState.Before: level = Level_1.Level.trace; break; } this.processLog(joinPoint, null, null, level); } static getClassAnnations() { return { "name": "DebugLogAspect", "params": { "constructor": ["container"], "logging": ["joinPoint"] } }; } }; tslib_1.__decorate([ aop_1.Around('execution(*.*)'), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [aop_1.Joinpoint]), tslib_1.__metadata("design:returntype", void 0) ], DebugLogAspect.prototype, "logging", null); DebugLogAspect = tslib_1.__decorate([ core_1.Singleton, aop_1.Aspect, tslib_1.__param(0, core_1.Inject(core_1.ContainerToken)), tslib_1.__metadata("design:paramtypes", [Object]) ], DebugLogAspect); exports.DebugLogAspect = DebugLogAspect; }); unwrapExports(DebugLogAspect_1); var DebugLogAspect_2 = DebugLogAspect_1.DebugLogAspect; var debugs = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); tslib_1.__exportStar(DebugLogAspect_1, exports); }); unwrapExports(debugs); var D__workspace_github_tsioc_packages_logs_es2015 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); tslib_1.__exportStar(Level_1, exports); tslib_1.__exportStar(ILoggerManager, exports); tslib_1.__exportStar(IConfigureLoggerManager, exports); tslib_1.__exportStar(ConfigureLoggerManger_1, exports); tslib_1.__exportStar(ConsoleLogManager_1, exports); tslib_1.__exportStar(LogConfigure, exports); tslib_1.__exportStar(LogFormater_1, exports); tslib_1.__exportStar(LoggerAspect_1, exports); tslib_1.__exportStar(AnnotationLogerAspect_1, exports); tslib_1.__exportStar(Logger, exports); tslib_1.__exportStar(LogModule_1, exports); tslib_1.__exportStar(debugs, exports); }); var index$1 = unwrapExports(D__workspace_github_tsioc_packages_logs_es2015); module.exports = index$1; //# sourceMappingURL=sourcemaps/logs.js.map