-- 写入埋点日志服务 local skynet = require "skynet" local statLogger = require "statLogger" local baseService = require("baseService") local command = {} local loggerList = {} local function writeLog(filename, message) local fileLogger = loggerList[filename] if not fileLogger then fileLogger = statLogger.new(filename) loggerList[filename] = fileLogger end fileLogger:write(message) end function command.writeLog(filename, message) writeLog(filename, message) end function command.writeLogList(msg) for i, v in ipairs(msg) do if v.filename and v.dataStr then writeLog(v.filename, v.dataStr) end end end -- 关闭长期不写入的文件句柄(24小时) local function clearInvaild() local currTime = os.time() local closeFiles = {} for filename, fileLogger in pairs(loggerList) do if fileLogger.lastWriteTime and currTime - fileLogger.lastWriteTime >= 24 * 60 * 60 then pcall(skynet.send, ".logMgr", "lua", "close", fileLogger.filename) table.insert(closeFiles, filename) end end for _, filename in ipairs(closeFiles) do loggerList[filename] = nil end create_timeout(60 * 100, clearInvaild) end function command.onStart() create_timeout(60 * 100, clearInvaild) end baseService.setNickName("writeLogSrv_" .. skynet.self()) baseService.start(command)