feat(All):Initial
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
/**
|
||||
* @author ErSan
|
||||
* @email mlt131220@163.com
|
||||
* @date 2025/2/24 下午2:21
|
||||
* @description 日志记录器
|
||||
*/
|
||||
import {useAddSignal, useDispatchSignal,useRemoveSignal} from '@/hooks';
|
||||
|
||||
export interface ILog {
|
||||
id: number;
|
||||
message: string;
|
||||
time: string;
|
||||
level: string;
|
||||
}
|
||||
|
||||
let _delLogFn,_clearLogFn,_historyChangedFn;
|
||||
class Logger {
|
||||
static Enum = Object.freeze({
|
||||
TRACE: "trace",
|
||||
DEBUG: "debug",
|
||||
INFO: "info",
|
||||
WARN: "warn",
|
||||
ERROR: "error"
|
||||
});
|
||||
|
||||
// 是否启用日志
|
||||
enabled: boolean = true;
|
||||
|
||||
// 日志信息
|
||||
logs: ILog[] = [];
|
||||
|
||||
constructor() {
|
||||
_delLogFn = this.delLog.bind(this);
|
||||
useAddSignal("deleteLog",_delLogFn);
|
||||
_clearLogFn = this.clearLogs.bind(this);
|
||||
useAddSignal("clearLogs",_clearLogFn);
|
||||
_historyChangedFn = this.historyChanged.bind(this);
|
||||
useAddSignal("historyChanged",_historyChangedFn);
|
||||
}
|
||||
|
||||
log(methodName:string,message:string){
|
||||
if(!this.enabled) return;
|
||||
|
||||
const _log = {
|
||||
id: this.logs.length,
|
||||
message,
|
||||
level: methodName,
|
||||
time: new Date().toLocaleString()
|
||||
}
|
||||
|
||||
this.logs.unshift(_log);
|
||||
|
||||
useDispatchSignal("addLog", _log, this.logs);
|
||||
}
|
||||
|
||||
trace(message:string) { this.log(Logger.Enum.TRACE, message); }
|
||||
debug(message:string) { this.log(Logger.Enum.DEBUG, message); }
|
||||
info(message:string) { this.log(Logger.Enum.INFO, message); }
|
||||
warn(message:string) { this.log(Logger.Enum.WARN, message); }
|
||||
error(message:string) { this.log(Logger.Enum.ERROR, message); }
|
||||
|
||||
/**
|
||||
* 删除日志
|
||||
* @param _log
|
||||
*/
|
||||
delLog(_log: ILog) {
|
||||
this.logs = this.logs.filter(log => log.id!== _log.id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空日志
|
||||
*/
|
||||
clearLogs() {
|
||||
this.logs = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 历史记录变化回调
|
||||
* @param cmd
|
||||
*/
|
||||
historyChanged(cmd){
|
||||
if(!cmd?.name) return;
|
||||
|
||||
let msg = cmd.name;
|
||||
const postposition = ['AddObjectCommand','RemoveObjectCommand','MoveObjectCommand'];
|
||||
if(postposition.includes(cmd.type)){
|
||||
msg = `${msg}: ${cmd.object.name} `;
|
||||
}else if(cmd.object){
|
||||
msg = `${cmd.object.name} ${msg.toLowerCase()}`;
|
||||
}
|
||||
|
||||
if(cmd.newValue !== undefined && cmd.oldValue !== undefined){
|
||||
let newValue = cmd.newValue;
|
||||
let oldValue = cmd.oldValue;
|
||||
if(typeof newValue === 'object'){
|
||||
newValue = JSON.stringify(newValue);
|
||||
}
|
||||
if(typeof oldValue === 'object'){
|
||||
oldValue = JSON.stringify(oldValue);
|
||||
}
|
||||
|
||||
msg = `${msg}: ${oldValue} ⇒ ${newValue}`;
|
||||
}
|
||||
|
||||
this.info(msg);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
useRemoveSignal("deleteLog",_delLogFn)
|
||||
_delLogFn = null;
|
||||
useRemoveSignal("clearLogs",_clearLogFn)
|
||||
_clearLogFn = null;
|
||||
useRemoveSignal("historyChanged",_historyChangedFn)
|
||||
_historyChangedFn = null;
|
||||
}
|
||||
}
|
||||
|
||||
export const logger = new Logger();
|
||||
|
||||
export default logger;
|
||||
Reference in New Issue
Block a user