157 lines
3.6 KiB
Plaintext
157 lines
3.6 KiB
Plaintext
import Level from "./Level.mjs";
|
|
import normalizeLevel from "./normalizeLevel.mjs";
|
|
class Logger {
|
|
/**
|
|
* Create a logger instance (创建日志实例)
|
|
* @param name Logger name (日志名称)
|
|
* @param options Logging options (日志选项)
|
|
*/
|
|
constructor(name, { level, appenders = [] } = {}) {
|
|
this.name = name;
|
|
this.appenders = /* @__PURE__ */ new Map();
|
|
this.context = {};
|
|
this._level = Level.INFO;
|
|
if (level == null) {
|
|
this.level = Level.INFO;
|
|
}
|
|
if (appenders) {
|
|
appenders.forEach((appender) => {
|
|
appender.setup(this);
|
|
this.appenders.set(appender.name, appender);
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* Log level name (日志级别名称)
|
|
*/
|
|
get levelName() {
|
|
return Level[this._level];
|
|
}
|
|
/**
|
|
* Log level (日志级别)
|
|
*/
|
|
get level() {
|
|
return this._level;
|
|
}
|
|
/**
|
|
* Set log level (设置日志级别)
|
|
* @param level Log level (日志级别)
|
|
*/
|
|
set level(level) {
|
|
const normalizedLevel = normalizeLevel(level);
|
|
if (normalizedLevel !== void 0) {
|
|
this._level = normalizedLevel;
|
|
}
|
|
}
|
|
/**
|
|
* Add context (添加上下文)
|
|
* @param key Context key (上下文键)
|
|
* @param value Context value (上下文值)
|
|
*/
|
|
addContext(key, value) {
|
|
this.context[key] = value;
|
|
}
|
|
/**
|
|
* Remove context (移除上下文)
|
|
* @param key Context key (上下文键)
|
|
*/
|
|
removeContext(key) {
|
|
delete this.context[key];
|
|
}
|
|
/**
|
|
* Clear context (清除上下文)
|
|
*/
|
|
clearContext() {
|
|
this.context = {};
|
|
}
|
|
/**
|
|
* Dispose all appenders (关闭所有appenders)
|
|
*/
|
|
dispose() {
|
|
const promises = [];
|
|
this.appenders.forEach((appender) => {
|
|
promises.push(appender.close());
|
|
});
|
|
return Promise.allSettled(promises);
|
|
}
|
|
/**
|
|
* Log a message of level TRACE (记录TRACE级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
trace(...args) {
|
|
this.log(Level.TRACE, args);
|
|
}
|
|
/**
|
|
* Log a message of level DEBUG (记录DEBUG级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
debug(...args) {
|
|
this.log(Level.DEBUG, args);
|
|
}
|
|
/**
|
|
* Log a message of level INFO (记录INFO级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
info(...args) {
|
|
this.log(Level.INFO, args);
|
|
}
|
|
/**
|
|
* Log a message of level WARN (记录WARN级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
warn(...args) {
|
|
this.log(Level.WARN, args);
|
|
}
|
|
/**
|
|
* Log a message of level ERROR (记录ERROR级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
error(...args) {
|
|
this.log(Level.ERROR, args);
|
|
}
|
|
/**
|
|
* Log a message of level FATAL (记录FATAL级别的日志)
|
|
* @param args Message arguments (消息参数)
|
|
*/
|
|
fatal(...args) {
|
|
this.log(Level.FATAL, args);
|
|
}
|
|
/**
|
|
* Create a log event (创建日志事件)
|
|
* @param level Log level (日志级别)
|
|
* @param message Message (消息)
|
|
* @returns Log event (日志事件)
|
|
*/
|
|
createEvent(level, message) {
|
|
return {
|
|
level,
|
|
levelName: Level[level],
|
|
message,
|
|
timestamp: /* @__PURE__ */ new Date(),
|
|
loggerName: this.name,
|
|
context: this.context
|
|
};
|
|
}
|
|
/**
|
|
* Log a message (记录日志)
|
|
* @param level Log level (日志级别)
|
|
* @param message Content (内容)
|
|
*/
|
|
log(level, message) {
|
|
if (level > this._level) {
|
|
return;
|
|
}
|
|
const event = this.createEvent(level, message);
|
|
this.appenders.forEach((appender) => {
|
|
try {
|
|
appender.write(event);
|
|
} catch (err) {
|
|
console.error("Appender error:", err);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
export {
|
|
Logger as default
|
|
};
|