import { hilog } from '@kit.PerformanceAnalysisKit'; // 日志域 - 应用程序的唯一标识符 const LOG_DOMAIN: number = 0; // 日志标签 - 用于筛选日志 const LOG_TAG: string = 'ClassMG'; /** * 日志类别枚举 */ export enum LogCategory { USER = 'USER', SETTINGS = 'SETTINGS', NAVIGATION = 'NAVIGATION', PERFORMANCE = 'PERFORMANCE', NETWORK = 'NETWORK', UI = 'UI', DATA = 'DATA', ERROR = 'ERROR', SYSTEM = 'SYSTEM', HOME = 'HOME', CLASS = 'CLASS' } /** * 日志事件类型枚举 */ export enum LogEventType { PAGE_VIEW = 'PAGE_VIEW', BUTTON_CLICK = 'BUTTON_CLICK', DATA_UPDATE = 'DATA_UPDATE', SETTING_CHANGE = 'SETTING_CHANGE', THEME_CHANGE = 'THEME_CHANGE', LANGUAGE_CHANGE = 'LANGUAGE_CHANGE', NOTIFICATION_CHANGE = 'NOTIFICATION_CHANGE', LOGIN = 'LOGIN', LOGOUT = 'LOGOUT', ERROR = 'ERROR', PAGE_APPEAR = 'PAGE_APPEAR', PAGE_DISAPPEAR = 'PAGE_DISAPPEAR', PAGE_SHOW = 'PAGE_SHOW', PAGE_HIDE = 'PAGE_HIDE', PAGE_BACK = 'PAGE_BACK', SYSTEM_INFO = 'SYSTEM_INFO', USER_LOGIN = 'USER_LOGIN', USER_LOGIN_FAIL = 'USER_LOGIN_FAIL' } /** * 版本日志项 */ export class VersionLogItem { version: string = ''; // 版本号 date: string = ''; // 发布日期 changes: string[] = []; // 更新内容列表 constructor(version: string = '', date: string = '', changes: string[] = []) { this.version = version; this.date = date; this.changes = changes; } } /** * 简单的日志记录 * @param message 日志信息 */ export function logInfo(message: string): void { hilog.info(LOG_DOMAIN, LOG_TAG, message); } /** * 日志管理类 - 主要用于管理版本日志 */ export class LogManager { private static instance: LogManager; // 版本日志列表 private versionLogs: VersionLogItem[] = []; // 当前语言 private currentLanguage: string = '中文'; private constructor() { this.initVersionLogs(); } /** * 获取LogManager实例 */ public static getInstance(): LogManager { if (!LogManager.instance) { LogManager.instance = new LogManager(); } return LogManager.instance; } /** * 设置当前语言 * @param language 语言设置 */ public setLanguage(language: string): void { this.currentLanguage = language; logInfo(`日志管理器语言已设置为: ${language}`); } /** * 记录信息日志 * @param category 日志类别 * @param type 事件类型 * @param message 日志消息或数据 */ public info(category: LogCategory, type: LogEventType, message: string | number | boolean): void { const logMessage = `[${category}][${type}] ${message}`; hilog.info(LOG_DOMAIN, LOG_TAG, logMessage); } /** * 记录调试日志,带有更多上下文 * @param category 日志类别 * @param type 事件类型 * @param key 相关的键或属性名 * @param oldValue 旧值 * @param newValue 新值 */ public debug(category: LogCategory, type: LogEventType, key: string, oldValue: string | number | boolean, newValue: string | number | boolean): void { const logMessage = `[${category}][${type}] ${key}: ${oldValue} -> ${newValue}`; hilog.debug(LOG_DOMAIN, LOG_TAG, logMessage); } /** * 记录警告日志 * @param category 日志类别 * @param message 警告消息 */ public warn(category: LogCategory, message: string): void { const logMessage = `[${category}][WARN] ${message}`; hilog.warn(LOG_DOMAIN, LOG_TAG, logMessage); } /** * 记录错误日志 * @param category 日志类别 * @param error 错误对象或消息 */ public error(category: LogCategory, error: string | Error): void { const errorMessage = error instanceof Error ? `${error.name}: ${error.message}` : error; const logMessage = `[${category}][ERROR] ${errorMessage}`; hilog.error(LOG_DOMAIN, LOG_TAG, logMessage); } /** * 初始化版本日志数据 */ private initVersionLogs(): void { this.versionLogs = [ new VersionLogItem("1.0.0", "2025-2-10", ["初始版本发布", "实现基本功能界面", "添加用户信息管理", "支持主题色切换", "支持中英文切换"]), new VersionLogItem("1.1.0", "2025-3-31", ["添加用户信息编辑功能", "增加版本日志功能", "改进主题颜色切换效果","添加公告栏","修复已知问题"]), new VersionLogItem("1.1.5","2025-4-1",["增加远程测试数据库","优化登录页面","优化用户信息设置","增加退出按钮"]), new VersionLogItem("1.1.7","2025-4-1",["添加测试按钮","修复已知问题"]), new VersionLogItem("1.2.0","2025-4-2",["添加课堂功能","修改上课页面逻辑"]), new VersionLogItem("1.2.0 beta1.0","2025-4-3",["测试消息发送","修复已知问题"]), new VersionLogItem("1.2.0 beta1.1","2025-4-4",["更新说明文档","添加日志输出"]), new VersionLogItem("1.2.0 beta1.2","2025-4-8修改首页",["修改首页"]), ]; } /** * 获取所有版本日志 */ public getVersionLogs(): VersionLogItem[] { return this.versionLogs; } /** * 获取最新版本号 */ public getLatestVersion(): string { if (this.versionLogs && this.versionLogs.length > 0) { // 先复制一份数组进行排序,确保不影响原数组 const sortedLogs = [...this.versionLogs].sort((a, b) => { const vA = a.version.split('.').map(Number); const vB = b.version.split('.').map(Number); for (let i = 0; i < Math.max(vA.length, vB.length); i++) { const numA = i < vA.length ? vA[i] : 0; const numB = i < vB.length ? vB[i] : 0; if (numB - numA !== 0) return numB - numA; } return 0; }); // 返回排序后的第一个元素(最高版本) return sortedLogs[0].version; } return "1.0.0"; // 默认版本号 } /** * 添加新版本日志 * @param versionLog 版本日志项 */ public addVersionLog(versionLog: VersionLogItem): void { // 检查版本是否已存在 const existingIndex = this.versionLogs.findIndex(log => log.version === versionLog.version); if (existingIndex !== -1) { // 如果已存在,更新该版本信息 this.versionLogs[existingIndex] = versionLog; logInfo(`版本日志已更新: ${versionLog.version}`); } else { // 如果不存在,添加到列表开头(最新版本) this.versionLogs.unshift(versionLog); logInfo(`新版本日志已添加: ${versionLog.version}`); } // 按版本号排序(假设版本号格式为x.y.z) this.versionLogs.sort((a, b) => { const vA = a.version.split('.').map(Number); const vB = b.version.split('.').map(Number); for (let i = 0; i < Math.max(vA.length, vB.length); i++) { const numA = i < vA.length ? vA[i] : 0; const numB = i < vB.length ? vB[i] : 0; if (numB - numA !== 0) return numB - numA; } return 0; }); } } // 导出单例实例 export default LogManager.getInstance();