cerevox
Version:
TypeScript SDK for browser automation and secure command execution in highly available and scalable micro computer environments
76 lines • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BaseClass = void 0;
exports.WithLogger = WithLogger;
exports.Logger = Logger;
require("reflect-metadata");
const logger_1 = require("../utils/logger");
/**
* Logger装饰器配置的Symbol键
*/
const LOGGER_CONFIG_KEY = Symbol('loggerConfig');
/**
* 封装设置元数据的逻辑
*/
function defineLoggerMetadata(target, config) {
Reflect.defineMetadata(LOGGER_CONFIG_KEY, config, target);
}
/**
* Logger装饰器 - 用于自动配置类的logger
* 支持新旧装饰器模式
*/
function WithLogger(config = {}) {
return function (target, context) {
defineLoggerMetadata(target, config);
};
}
/**
* Logger装饰器 - 自动使用类名作为key
* 支持新旧装饰器模式
*/
function Logger(additionalBindings) {
return function (target, context) {
const key = target.name;
const config = { key, additionalBindings };
defineLoggerMetadata(target, config);
};
}
/**
* 基类,为所有core模块提供统一的logger初始化功能
*/
class BaseClass {
/**
* 构造函数
* 自动从装饰器元数据中获取logger配置
*/
constructor(logLevel) {
const constructor = this.constructor;
const config = Reflect.getMetadata(LOGGER_CONFIG_KEY, constructor) || {};
// 如果没有配置key,使用类名
const key = config.key || constructor.name;
this.className = key;
this.logger = (0, logger_1.createClassLogger)(key, config.additionalBindings, logLevel || config.logLevel);
// 记录类初始化
// this.logger.debug(`${key} 类初始化完成`);
}
/**
* 获取类名
*/
getClassName() {
return this.className;
}
/**
* 获取logger实例
*/
getLogger() {
return this.logger;
}
/**
* 创建子logger
*/
createChildLogger(bindings) {
return this.logger.child(bindings);
}
}
exports.BaseClass = BaseClass;
//# sourceMappingURL=base.js.map