UNPKG

sync-upstream

Version:

A tool for synchronizing code with upstream repositories with incremental updates and parallel processing.

142 lines (141 loc) 5.36 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.logger = exports.Logger = exports.LogLevel = void 0; const node_path_1 = __importDefault(require("node:path")); const chalk_1 = __importDefault(require("chalk")); const consola_1 = __importDefault(require("consola")); const date_fns_1 = require("date-fns"); const fs_extra_1 = __importDefault(require("fs-extra")); // 定义日志级别 var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "debug"; LogLevel["INFO"] = "info"; LogLevel["SUCCESS"] = "success"; LogLevel["WARN"] = "warn"; LogLevel["ERROR"] = "error"; LogLevel["VERBOSE"] = "verbose"; })(LogLevel || (exports.LogLevel = LogLevel = {})); // 默认日志配置 const DEFAULT_CONFIG = { level: LogLevel.INFO, logToFile: false, logFilePath: node_path_1.default.join(process.cwd(), 'sync-upstream.log'), showTimestamp: true, showLevel: true, }; class Logger { constructor(config = {}) { this.logLevels = [ LogLevel.DEBUG, LogLevel.VERBOSE, LogLevel.INFO, LogLevel.SUCCESS, LogLevel.WARN, LogLevel.ERROR, ]; this.config = { ...DEFAULT_CONFIG, ...config }; this.consola = consola_1.default.create({ level: this.logLevels.indexOf(this.config.level), formatOptions: { colors: true, date: this.config.showTimestamp, }, }); // 如果配置了日志文件,确保目录存在 if (this.config.logToFile) { fs_extra_1.default.ensureDirSync(node_path_1.default.dirname(this.config.logFilePath)); } } // 获取当前时间戳 getTimestamp() { return (0, date_fns_1.format)(new Date(), 'YYYY-MM-DD HH:mm:ss'); } // 记录到文件 logToFile(level, message) { if (!this.config.logToFile) return; const timestamp = this.getTimestamp(); const logMessage = this.config.showLevel ? `[${timestamp}] [${level.toUpperCase()}] ${message}\n` : `[${timestamp}] ${message}\n`; fs_extra_1.default.appendFile(this.config.logFilePath, logMessage) .catch(error => console.error('写入日志文件失败:', error)); } // 调试日志 debug(message) { if (this.logLevels.indexOf(LogLevel.DEBUG) >= this.logLevels.indexOf(this.config.level)) { this.consola.debug(chalk_1.default.blue(`[DEBUG] ${message}`)); this.logToFile(LogLevel.DEBUG, message); } } // 详细日志 verbose(message) { if (this.logLevels.indexOf(LogLevel.VERBOSE) >= this.logLevels.indexOf(this.config.level)) { this.consola.log(chalk_1.default.grey(`[VERBOSE] ${message}`)); this.logToFile(LogLevel.VERBOSE, message); } } // 设置日志级别 setLevel(level) { this.config.level = level; this.consola.level = this.logLevels.indexOf(level); } // 信息日志 info(message) { if (this.logLevels.indexOf(LogLevel.INFO) >= this.logLevels.indexOf(this.config.level)) { this.consola.info(chalk_1.default.cyan(`[INFO] ${message}`)); this.logToFile(LogLevel.INFO, message); } } // 成功日志 success(message) { if (this.logLevels.indexOf(LogLevel.SUCCESS) >= this.logLevels.indexOf(this.config.level)) { this.consola.success(chalk_1.default.green(`[SUCCESS] ${message}`)); this.logToFile(LogLevel.SUCCESS, message); } } // 警告日志 warn(message) { if (this.logLevels.indexOf(LogLevel.WARN) >= this.logLevels.indexOf(this.config.level)) { this.consola.warn(chalk_1.default.yellow(`[WARN] ${message}`)); this.logToFile(LogLevel.WARN, message); } } // 错误日志 error(message, error) { if (this.logLevels.indexOf(LogLevel.ERROR) >= this.logLevels.indexOf(this.config.level)) { const errorMessage = error ? `${message}: ${error.message}` : message; this.consola.error(chalk_1.default.red(`[ERROR] ${errorMessage}`)); this.logToFile(LogLevel.ERROR, errorMessage); // 如果有错误堆栈,也记录下来 if (error?.stack) { this.logToFile(LogLevel.ERROR, `Stack trace: ${error.stack}`); } } } // 步骤日志(用于显示同步过程中的主要步骤) step(stepNumber, message) { const formattedMessage = chalk_1.default.bold.magenta(` ${stepNumber}. ${message}`); this.consola.log(formattedMessage); this.logToFile(LogLevel.INFO, `Step ${stepNumber}: ${message}`); } // 更新配置 updateConfig(config) { this.config = { ...this.config, ...config }; this.consola = consola_1.default.create({ level: this.logLevels.indexOf(this.config.level), formatOptions: { colors: true, date: this.config.showTimestamp, }, }); } } exports.Logger = Logger; // 创建默认 logger 实例 exports.logger = new Logger();