writeLogSrv.lua 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -- 写入埋点日志服务
  2. local skynet = require "skynet"
  3. local statLogger = require "statLogger"
  4. local baseService = require("baseService")
  5. local command = {}
  6. local loggerList = {}
  7. local function writeLog(filename, message)
  8. local fileLogger = loggerList[filename]
  9. if not fileLogger then
  10. fileLogger = statLogger.new(filename)
  11. loggerList[filename] = fileLogger
  12. end
  13. fileLogger:write(message)
  14. end
  15. function command.writeLog(filename, message)
  16. writeLog(filename, message)
  17. end
  18. function command.writeLogList(msg)
  19. for i, v in ipairs(msg) do
  20. if v.filename and v.dataStr then
  21. writeLog(v.filename, v.dataStr)
  22. end
  23. end
  24. end
  25. -- 关闭长期不写入的文件句柄(24小时)
  26. local function clearInvaild()
  27. local currTime = os.time()
  28. local closeFiles = {}
  29. for filename, fileLogger in pairs(loggerList) do
  30. if fileLogger.lastWriteTime and currTime - fileLogger.lastWriteTime >= 24 * 60 * 60 then
  31. pcall(skynet.send, ".logMgr", "lua", "close", fileLogger.filename)
  32. table.insert(closeFiles, filename)
  33. end
  34. end
  35. for _, filename in ipairs(closeFiles) do
  36. loggerList[filename] = nil
  37. end
  38. create_timeout(60 * 100, clearInvaild)
  39. end
  40. function command.onStart()
  41. create_timeout(60 * 100, clearInvaild)
  42. end
  43. baseService.setNickName("writeLogSrv_" .. skynet.self())
  44. baseService.start(command)