228 lines
6.9 KiB
Plaintext
228 lines
6.9 KiB
Plaintext
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();
|