@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
74 lines • 2.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggerManager = void 0;
const tslog_1 = require("tslog");
class LoggerManager {
logger;
// 打印等级应低于储存等级
printLogLevel;
// 储存等级应高于打印等级
storageLogLevel;
transports;
enable = {
print: true,
storage: true,
};
serializers;
levels = ['SILLY', 'TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'];
constructor(options) {
this.printLogLevel = options?.printLogLevel || 'INFO';
this.storageLogLevel = options?.storageLogLevel || 'INFO';
this.serializers = options?.serializers || [];
this.transports = options?.transports || [];
this.logger =
options?.logger ||
new tslog_1.Logger({
name: 'TSTool',
maskValuesOfKeys: ['password', 'token'],
stylePrettyLogs: true,
minLevel: this.levels.indexOf(this.printLogLevel),
prettyLogTemplate: '{{logLevelName}}\t{{name}}\t{{hh}}:{{MM}}:{{ss}}:{{ms}}\t{{filePathWithLine}}\t\t',
prettyLogTimeZone: 'local',
...options?.tslogOptions,
});
// 注册自定义传输器
this.logger.attachTransport(this.customTransport.bind(this));
}
/**
* 获取子日志器
* @param name 日志器名称
* @param shot 是否为简洁模式
* @param options 日志器配置 简洁模式下不需要
*/
getSubLogger(name, shot = false, options) {
return shot
? this.logger.getSubLogger({
name,
prettyLogTemplate: '{{logLevelName}}\t{{name}}\t{{hh}}:{{MM}}:{{ss}}:{{ms}}\t\t',
})
: this.logger.getSubLogger({ name, ...options?.tslogOptions });
}
customTransport(logObj) {
// 序列化
for (const serializer of this.serializers) {
logObj = serializer.init(logObj);
}
// 自定义储存
if (this.enable.storage && this.shouldStore(logObj)) {
this.transports.forEach((transport) => transport.exec(logObj));
}
}
shouldStore(logObj) {
return this.levels.indexOf(logObj._meta.logLevelName) >= this.levels.indexOf(this.storageLogLevel);
}
// 添加新的传输器
addTransport(transport) {
this.transports.push(transport);
}
// 移除传输器
removeTransport(transport) {
this.transports = this.transports.filter((t) => t !== transport);
}
}
exports.LoggerManager = LoggerManager;
//# sourceMappingURL=LoggerManager.js.map