106 lines
2.6 KiB
Plaintext
106 lines
2.6 KiB
Plaintext
"use strict";
|
|
const Level = require("./Level.js");
|
|
const Logger = require("./Logger.js");
|
|
const normalizeLevel = require("./normalizeLevel.js");
|
|
class LogFactory {
|
|
/**
|
|
* Constructor (构造函数)
|
|
* @param config Configuration options (配置选项)
|
|
*/
|
|
constructor(config) {
|
|
this.loggers = /* @__PURE__ */ new Map();
|
|
this.LoggerClass = Logger;
|
|
this.defaultLevel = Level.INFO;
|
|
this.appenders = [];
|
|
this.configure(config);
|
|
}
|
|
/**
|
|
* Get the default log level (获取或设置默认日志级别)
|
|
*/
|
|
get level() {
|
|
return this.defaultLevel;
|
|
}
|
|
/**
|
|
* Get the default log level name (获取或设置默认日志级别名称)
|
|
*/
|
|
get levelName() {
|
|
return Level[this.defaultLevel];
|
|
}
|
|
/**
|
|
* Update the default log level (更新默认日志级别)
|
|
* @param level Log level (日志级别)
|
|
* @param updateCachedLoggers Whether to update the cached loggers (是否更新缓存的日志器)
|
|
* @returns Update level success if true (如果为 true 表示更新成功)
|
|
*/
|
|
updateLevel(level, updateCachedLoggers) {
|
|
const normalizedLevel = normalizeLevel(level);
|
|
const isValidLevel = normalizedLevel !== void 0;
|
|
if (isValidLevel) {
|
|
this.defaultLevel = normalizedLevel;
|
|
if (updateCachedLoggers !== false) {
|
|
this.loggers.forEach((logger) => {
|
|
logger.level = normalizedLevel;
|
|
});
|
|
}
|
|
}
|
|
return isValidLevel;
|
|
}
|
|
/**
|
|
* Configure the log factory (配置日志工厂)
|
|
* @param param Configuration options (配置选项)
|
|
*/
|
|
configure({
|
|
LoggerClass,
|
|
level,
|
|
appenders
|
|
} = {}) {
|
|
if (LoggerClass) {
|
|
this.LoggerClass = LoggerClass;
|
|
}
|
|
if (level) {
|
|
this.updateLevel(level, false);
|
|
}
|
|
if (appenders) {
|
|
this.appenders = appenders;
|
|
}
|
|
}
|
|
/**
|
|
* Get a logger instance (获取日志实例)
|
|
* @param name Logger name (日志名称)
|
|
*/
|
|
getLogger(name) {
|
|
let logger = this.loggers.get(name);
|
|
if (!logger) {
|
|
const { LoggerClass } = this;
|
|
logger = new LoggerClass(name, {
|
|
level: this.defaultLevel,
|
|
appenders: this.appenders
|
|
});
|
|
this.loggers.set(name, logger);
|
|
}
|
|
return logger;
|
|
}
|
|
/**
|
|
* Clear the logger cache (清除日志缓存)
|
|
* @param name Logger name (日志名称)
|
|
*/
|
|
clear(name) {
|
|
if (name) {
|
|
this.loggers.delete(name);
|
|
} else {
|
|
this.loggers.clear();
|
|
}
|
|
}
|
|
/**
|
|
* Dispose the log factory (销毁日志工厂)
|
|
*/
|
|
dispose() {
|
|
const promises = [];
|
|
this.loggers.forEach((logger) => {
|
|
promises.push(logger.dispose());
|
|
});
|
|
return Promise.allSettled(promises);
|
|
}
|
|
}
|
|
module.exports = LogFactory;
|