185 lines
5.1 KiB
Lua
185 lines
5.1 KiB
Lua
local global = {}
|
|
local logs = nil
|
|
local old_print = print
|
|
local util = require("debugplus.util")
|
|
local levelMeta = {
|
|
DEBUG = {
|
|
level = 'DEBUG',
|
|
colour = {1, 0, 1},
|
|
shouldShow = false,
|
|
},
|
|
INFO = {
|
|
level = 'INFO',
|
|
colour = {0, 1, 1},
|
|
shouldShow = true,
|
|
},
|
|
WARN = {
|
|
level = 'WARN',
|
|
colour = {1, 1, 0},
|
|
shouldShow = true,
|
|
},
|
|
ERROR = {
|
|
level = 'ERROR',
|
|
colour = {1, 0, 0},
|
|
shouldShow = true,
|
|
}
|
|
}
|
|
global.levelMeta = levelMeta
|
|
local SMODSLogPattern = "[%d-]+ [%d:]+ :: (%S+) +:: (%S+) :: (.*)"
|
|
local SMODSLevelMeta = {
|
|
TRACE = levelMeta.DEBUG,
|
|
DEBUG = levelMeta.DEBUG,
|
|
INFO = levelMeta.INFO,
|
|
WARN = levelMeta.WARN,
|
|
ERROR = levelMeta.ERROR,
|
|
FATAL = levelMeta.ERROR
|
|
}
|
|
|
|
function global.handleLogAdvanced(data, ...)
|
|
local stringifyPrint = require("debugplus.config").getValue("stringifyPrint")
|
|
if not stringifyPrint then
|
|
old_print(...)
|
|
end
|
|
local _str = ""
|
|
local stringify = tostring
|
|
if require("debugplus.config").getValue("processTables") then
|
|
stringify = util.stringifyTable
|
|
end
|
|
for _, v in ipairs({...}) do
|
|
_str = _str .. stringify(v) .. " "
|
|
end
|
|
if stringifyPrint then
|
|
old_print(_str)
|
|
end
|
|
local meta = {
|
|
str = _str,
|
|
time = love.timer.getTime(),
|
|
colour = data.colour,
|
|
level = data.level,
|
|
command = data.command,
|
|
}
|
|
if data.fromPrint then
|
|
local level, source, msg = string.match(_str, SMODSLogPattern)
|
|
if level then
|
|
local levelMeta = SMODSLevelMeta[level] or SMODSLevelMeta.INFO
|
|
meta = {
|
|
str = "[" .. source .. "] " .. msg,
|
|
time = love.timer.getTime(),
|
|
colour = levelMeta.colour,
|
|
level = levelMeta.level
|
|
}
|
|
else
|
|
-- Handling the few times the game itself prints
|
|
if _str:match("^LONG DT @ [%d.: ]+$") then -- LONG DT messages
|
|
meta.level = "DEBUG"
|
|
meta.colour = levelMeta.DEBUG.colour
|
|
elseif _str:match("^ERROR LOADING GAME: Card area '[%w%d_-]+' not instantiated before load") then -- Error loading areas
|
|
meta.level = "ERROR"
|
|
meta.colour = levelMeta.ERROR.colour
|
|
elseif _str:match("^\n [+-]+ \n | #") and debug.getinfo(3).short_src == "engine/controller.lua" then -- Profiler results table. Extra check cause I don't trust this pattern to not have false positives
|
|
meta.level = "DEBUG"
|
|
meta.colour = levelMeta.DEBUG.colour
|
|
meta.command = true
|
|
end
|
|
end
|
|
end
|
|
if not meta.colour then meta.colour = levelMeta[meta.level].colour end
|
|
|
|
-- Dirty hack to work better with multiline text
|
|
if string.match(meta.str, "\n") then
|
|
local first = true
|
|
for w in string.gmatch(meta.str, "[^\n]+") do
|
|
local _meta = {
|
|
str = w,
|
|
time = meta.time,
|
|
colour = meta.colour,
|
|
level = meta.level,
|
|
command = meta.command,
|
|
hack_no_prefix = not first
|
|
}
|
|
first = false
|
|
table.insert(logs, _meta)
|
|
-- TODO: fix me
|
|
if logOffset ~= 0 then
|
|
global.handleLogsChange(1)
|
|
end
|
|
if #logs > 5000 then
|
|
table.remove(logs, 1)
|
|
end
|
|
end
|
|
else
|
|
table.insert(logs, meta)
|
|
global.handleLogsChange(1)
|
|
if logOffset ~= 0 then
|
|
global.handleLogsChange(1)
|
|
end
|
|
if #logs > 5000 then
|
|
table.remove(logs, 1)
|
|
end
|
|
end
|
|
end
|
|
|
|
function global.handleLog(colour, level, ...)
|
|
global.handleLogAdvanced({
|
|
colour = colour,
|
|
level = level,
|
|
command = true,
|
|
}, ...)
|
|
end
|
|
|
|
function global.log(...)
|
|
global.handleLogAdvanced({
|
|
colour = {.65, .36, 1},
|
|
level = "INFO",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.logCmd(...)
|
|
global.handleLog({.65, .36, 1}, "INFO", "[DebugPlus]", ...)
|
|
end
|
|
|
|
|
|
function global.errorLog(...)
|
|
global.handleLogAdvanced({
|
|
colour = {1, 0, 0},
|
|
level = "ERROR",
|
|
}, "[DebugPlus]", ...)
|
|
end
|
|
|
|
function global.registerLogHandler()
|
|
if logs then
|
|
return
|
|
end
|
|
logs = {}
|
|
global.logs = logs
|
|
print = function(...)
|
|
global.handleLogAdvanced({
|
|
colour = {0, 1, 1},
|
|
level = "INFO",
|
|
fromPrint = true,
|
|
}, ...)
|
|
end
|
|
end
|
|
|
|
function global.handleLogsChange() -- Placeholder. Overwritten in console.lua
|
|
end
|
|
|
|
|
|
-- config.configDefinition.logLevel.onUpdate = function(v)
|
|
-- for k, v in pairs(levelMeta) do
|
|
-- v.shouldShow = false
|
|
-- end
|
|
|
|
-- levelMeta.ERROR.shouldShow = true
|
|
-- if v == "ERROR" then return end
|
|
-- levelMeta.WARN.shouldShow = true
|
|
-- if v == "WARN" then return end
|
|
-- levelMeta.INFO.shouldShow = true
|
|
-- if v == "INFO" then return end
|
|
-- levelMeta.DEBUG.shouldShow = true
|
|
-- end
|
|
|
|
-- config.configDefinition.logLevel.onUpdate(config.getValue("logLevel"))
|
|
|
|
return global
|