Go to most recent revision | Compare with Previous | Blame | View Log
--[[ Addon: util Author: TProg Taonnor Created by @Taonnor ]]-- --[[ Class definition ]]-- -- A table in hole lua workspace must be unique -- The debug logger is global util table, used in several of my addons if (TaosDebugLogger == nil) then TaosDebugLogger = {} TaosDebugLogger.__index = TaosDebugLogger setmetatable(TaosDebugLogger, { __call = function (cls, ...) return cls.new(...) end, }) --[[ Class constructor ]]-- function TaosDebugLogger.new(name, logCommand, traceActive, debugActive, errorActive, directPrint, catchLuaErrors) local self = setmetatable({}, TaosDebugLogger) -- class members self.name = name self.logCommand = logCommand self.buffer = {} self.TRACE_ACTIVE = traceActive self.DEBUG_ACTIVE = debugActive self.ERROR_ACTIVE = errorActive self.DIRECT_PRINT = directPrint self.CATCH_LUA_ERRORS = catchLuaErrors SLASH_COMMANDS[self.logCommand] = self:CommandShowLogs() EVENT_MANAGER:RegisterForEvent(self.name, EVENT_PLAYER_ACTIVATED, function(eventCode) self:OnPlayerActivated(eventCode) end) EVENT_MANAGER:RegisterForEvent(self.name, EVENT_LUA_ERROR, function(eventCode, errorOutput) self:OnLuaError(eventCode, errorOutput) end) return self end --[[ Trace ]]-- function TaosDebugLogger:logTrace(functionName) if (self.TRACE_ACTIVE == false) then return end local formatMessage = "[%s - TRACE] %s" self:logMessage(formatMessage:format(GetTimeString(), functionName)) end --[[ Debug ]]-- function TaosDebugLogger:logDebug(...) if (self.DEBUG_ACTIVE == false) then return end local formatMessage = "[%s - DEBUG] %s" local msg = "" for i = 1, select("#", ...) do if (i == 1) then msg = tostring(select(i, ...)) else msg = msg .. "; " .. tostring(select(i, ...)) end end self:logMessage(formatMessage:format(GetTimeString(), msg)) end --[[ Error ]]-- function TaosDebugLogger:logError(...) if (self.ERROR_ACTIVE == false) then return end local formatMessage = "[%s - ERROR] %s" local msg = "" for i = 1, select("#", ...) do if (i == 1) then msg = tostring(select(i, ...)) else msg = msg .. "; " .. tostring(select(i, ...)) end end self:logMessage(formatMessage:format(GetTimeString(), msg)) end --[[ Log ]]-- function TaosDebugLogger:logMessage(msg) self:AddMessage(msg) if (self.DIRECT_PRINT) then d(msg) end end --[[ Adds messages to buffer ]]-- function TaosDebugLogger:AddMessage(msg) if(not msg or self.buffer == nil) then return end local buf = self.buffer buf[#buf + 1] = msg end --[[ Print buffered messages ]]-- function TaosDebugLogger:PrintMessages() if(self.buffer == nil) then return end for i,msg in ipairs(self.buffer) do d(msg) end end --[[ Prints buffered outputs ]]-- function TaosDebugLogger:OnPlayerActivated(eventCode) self:PrintMessages() EVENT_MANAGER:UnregisterForEvent(self.name, EVENT_PLAYER_ACTIVATED) end --[[ Catches lua errors ]]-- function TaosDebugLogger:OnLuaError(eventCode, errorOutput) if (self.CATCH_LUA_ERRORS == false) then return end self:logMessage(errorOutput) ZO_UIErrors_HideCurrent() end --[[ Handles /tapslogs command ]]-- function TaosDebugLogger:CommandShowLogs() self:PrintMessages() end end