mstf-kit
Version:
一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数
234 lines (233 loc) • 4.93 kB
JavaScript
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
LogLevel2[LogLevel2["NONE"] = 0] = "NONE";
LogLevel2[LogLevel2["ERROR"] = 1] = "ERROR";
LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
LogLevel2[LogLevel2["INFO"] = 3] = "INFO";
LogLevel2[LogLevel2["DEBUG"] = 4] = "DEBUG";
return LogLevel2;
})(LogLevel || {});
class Logger {
/**
* 创建 Logger 实例
* @param options 日志配置选项
*/
constructor(options = {}) {
this.enabled = options.enabled !== false;
this.prefix = options.prefix || "[Logger]";
this.showTimestamp = options.showTimestamp || false;
this.customHandler = options.customHandler;
if (typeof options.level === "string") {
this.level = this.parseLogLevel(options.level);
} else {
this.level = options.level !== void 0 ? options.level : 3;
}
}
/**
* 解析字符串形式的日志级别
*/
parseLogLevel(level) {
const levelMap = {
"none": 0,
"error": 1,
"warn": 2,
"info": 3,
"debug": 4
/* DEBUG */
};
return levelMap[level.toLowerCase()] || 3;
}
/**
* 格式化日志消息
*/
formatMessage(...args) {
const parts = [];
if (this.showTimestamp) {
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
parts.push(`[${timestamp}]`);
}
parts.push(this.prefix);
parts.push(...args);
return parts;
}
/**
* 输出日志
*/
output(level, logLevel, consoleFn, ...args) {
if (!this.enabled || this.level < logLevel) {
return;
}
const formattedArgs = this.formatMessage(...args);
if (this.customHandler) {
this.customHandler(level, this.prefix, ...args);
} else {
consoleFn(...formattedArgs);
}
}
/**
* 输出调试日志
* @param args 日志内容
*/
debug(...args) {
this.output("DEBUG", 4, console.log, ...args);
}
/**
* 输出信息日志
* @param args 日志内容
*/
log(...args) {
this.output("INFO", 3, console.log, ...args);
}
/**
* 输出信息日志(别名)
* @param args 日志内容
*/
info(...args) {
this.output("INFO", 3, console.info, ...args);
}
/**
* 输出警告日志
* @param args 日志内容
*/
warn(...args) {
this.output("WARN", 2, console.warn, ...args);
}
/**
* 输出错误日志
* @param args 日志内容
*/
error(...args) {
this.output("ERROR", 1, console.error, ...args);
}
/**
* 输出分组日志(开始)
* @param label 分组标签
*/
group(label) {
if (this.enabled && this.level >= 3) {
console.group(this.formatMessage(label).join(" "));
}
}
/**
* 输出折叠的分组日志(开始)
* @param label 分组标签
*/
groupCollapsed(label) {
if (this.enabled && this.level >= 3) {
console.groupCollapsed(this.formatMessage(label).join(" "));
}
}
/**
* 结束分组日志
*/
groupEnd() {
if (this.enabled && this.level >= 3) {
console.groupEnd();
}
}
/**
* 输出表格
* @param data 表格数据
*/
table(data) {
if (this.enabled && this.level >= 3) {
console.table(data);
}
}
/**
* 输出对象的详细信息
* @param obj 对象
*/
dir(obj) {
if (this.enabled && this.level >= 4) {
console.dir(obj);
}
}
/**
* 计时开始
* @param label 计时标签
*/
time(label) {
if (this.enabled && this.level >= 4) {
console.time(`${this.prefix} ${label}`);
}
}
/**
* 计时结束
* @param label 计时标签
*/
timeEnd(label) {
if (this.enabled && this.level >= 4) {
console.timeEnd(`${this.prefix} ${label}`);
}
}
/**
* 启用日志
*/
enable() {
this.enabled = true;
}
/**
* 禁用日志
*/
disable() {
this.enabled = false;
}
/**
* 设置日志级别
* @param level 日志级别
*/
setLevel(level) {
if (typeof level === "string") {
this.level = this.parseLogLevel(level);
} else {
this.level = level;
}
}
/**
* 设置日志前缀
* @param prefix 前缀
*/
setPrefix(prefix) {
this.prefix = prefix;
}
/**
* 获取当前是否启用
*/
isEnabled() {
return this.enabled;
}
/**
* 获取当前日志级别
*/
getLevel() {
return this.level;
}
/**
* 创建子 Logger
* @param subPrefix 子前缀
* @returns 新的 Logger 实例
*/
createChild(subPrefix) {
return new Logger({
enabled: this.enabled,
prefix: `${this.prefix}:${subPrefix}`,
level: this.level,
showTimestamp: this.showTimestamp,
customHandler: this.customHandler
});
}
}
function createLogger(options = {}) {
return new Logger(options);
}
const defaultLogger = createLogger({
enabled: false,
prefix: "[mstf-kit]"
});
export {
LogLevel,
Logger,
createLogger,
Logger as default,
defaultLogger
};