ClassMG/entry/src/main/ets/common/logtext.ets
2025-04-08 17:13:20 +08:00

228 lines
6.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();