91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
/*
|
|
文件名:LogClass.nut
|
|
路径:Dps_A/BaseClass/LogClass/LogClass.nut
|
|
创建日期:2024-10-10 11:35
|
|
文件用途:日志类
|
|
*/
|
|
class Log {
|
|
|
|
//linux创建文件夹
|
|
// function api_mkdir(path) {
|
|
// var path_ptr = Memory.allocUtf8String(path);
|
|
// if (opendir(path_ptr))
|
|
// return true;
|
|
// return mkdir(path_ptr, 0x1FF);
|
|
// }
|
|
_opendir_Address = Module.getExportByName(null, "opendir");
|
|
_mkdir_Address = Module.getExportByName(null, "mkdir");
|
|
|
|
|
|
Logger = null;
|
|
LoggerBuffer = null;
|
|
|
|
Coro = null;
|
|
|
|
constructor(Info) {
|
|
Logger = {};
|
|
LoggerBuffer = {};
|
|
|
|
local DirPath = Str_Ptr("/dp_s/log");
|
|
if (!(Sq_CallFunc(_opendir_Address, "int", ["pointer"], DirPath))) {
|
|
Sq_CallFunc(_mkdir_Address, "int", ["pointer", "int"], DirPath, 0x1FF);
|
|
}
|
|
|
|
//打开文件输出句柄
|
|
foreach(Level, Path in Info) {
|
|
|
|
try {
|
|
local Io = IO(Path, "a");
|
|
Logger[Level] <- Io;
|
|
LoggerBuffer[Level] <- [];
|
|
} catch (exception) {
|
|
error("日志器初始化失败");
|
|
}
|
|
}
|
|
|
|
getroottable()._Logger_Object_ <- this;
|
|
Cb_timer_dispatch_Func.rawset("__System__Logger__Event", Update.bindenv(this));
|
|
|
|
Coro = newthread(__Write__.bindenv(this));
|
|
}
|
|
|
|
|
|
function Put(Type, Message) {
|
|
if (getroottable().rawin("_Logger_Object_")) {
|
|
if (getroottable()._Logger_Object_.Logger.rawin(Type)) {
|
|
getroottable()._Logger_Object_.LoggerBuffer[Type].push(Message);
|
|
// getroottable()._Logger_Object_.Logger[Type].Write(Message);
|
|
// getroottable()._Logger_Object_.Logger[Type].Flush();
|
|
} else {
|
|
error("未知的日志类型");
|
|
}
|
|
} else {
|
|
error("未初始化日志器");
|
|
}
|
|
}
|
|
|
|
function __Write__() {
|
|
local ret = suspend("no");
|
|
foreach(Type, MessageArr in LoggerBuffer) {
|
|
for (local i = 0; i< MessageArr.len(); i++) {
|
|
Logger[Type].Write(MessageArr[i]);
|
|
Logger[Type].Flush();
|
|
MessageArr.remove(i);
|
|
i--;
|
|
suspend("no");
|
|
}
|
|
}
|
|
return "yes";
|
|
}
|
|
|
|
function Update() {
|
|
local susparam = "noq";
|
|
if (Coro.getstatus() == "idle") susparam = Coro.call();
|
|
else if (Coro.getstatus() == "suspended") susparam = Coro.wakeup();
|
|
|
|
if (susparam == "yes") {
|
|
Coro = newthread(__Write__.bindenv(this));
|
|
}
|
|
}
|
|
}
|