111
This commit is contained in:
90
Dps_A/BaseClass/LogClass/LogClass.nut
Normal file
90
Dps_A/BaseClass/LogClass/LogClass.nut
Normal file
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
文件名: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));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user