Add Druid logger

This commit is contained in:
Insality
2025-10-27 22:25:37 +02:00
parent c43356d743
commit 2a169da3af
3 changed files with 90 additions and 9 deletions

View File

@@ -2,6 +2,7 @@ local event = require("event.event")
local events = require("event.events") local events = require("event.events")
local settings = require("druid.system.settings") local settings = require("druid.system.settings")
local druid_instance = require("druid.system.druid_instance") local druid_instance = require("druid.system.druid_instance")
local logger = require("druid.system.druid_logger")
local default_style = require("druid.styles.default.style") local default_style = require("druid.styles.default.style")
@@ -193,4 +194,25 @@ function M.unregister_druid_as_widget()
end end
---@param logger_instance druid.logger|table|nil
function M.set_logger(logger_instance)
logger.set_logger(logger_instance)
end
---@param name string?
---@param level string|nil
---@return druid.logger
function M.get_logger(name, level)
if not name then
local current_script_path = debug.getinfo(3).short_src
local basename = string.match(current_script_path, "([^/\\]+)$")
basename = string.match(basename, "(.*)%..*$")
name = basename
end
return setmetatable({ name = name, level = level }, { __index = logger })
end
return M return M

View File

@@ -404,24 +404,44 @@ function M.is_multitouch_supported()
end end
---Simple table to one-line string converter ---Converts table to one-line string
---@param t table ---@param t table
---@return string ---@param depth number?
function M.table_to_string(t) ---@param result string|nil Internal parameter
if not t then ---@return string, boolean result String representation of table, Is max string length reached
return "" function M.table_to_string(t, depth, result)
if type(t) ~= "table" then
return tostring(t) or "", false
end end
local result = "{" depth = depth or 0
result = result or "{"
for key, value in pairs(t) do for key, value in pairs(t) do
if #result > 1 then if #result > 1 then
result = result .. "," result = result .. ", "
end
result = result .. key .. ": " .. value
end end
return result .. "}" if type(value) == "table" then
if depth == 0 then
local table_len = 0
for _ in pairs(value) do
table_len = table_len + 1
end
result = result .. key .. ": {... #" .. table_len .. "}"
else
local convert_result, is_limit = M.table_to_string(value, depth - 1, "")
result = result .. key .. ": {" .. convert_result
if is_limit then
break
end
end
else
result = result .. key .. ": " .. tostring(value)
end
end
return result .. "}", false
end end

View File

@@ -0,0 +1,39 @@
local helper = require("druid.helper")
---@class druid.logger
---@field trace fun(_, msg: string, data: any)
---@field debug fun(_, msg: string, data: any)
---@field info fun(_, msg: string, data: any)
---@field warn fun(_, msg: string, data: any)
---@field error fun(_, msg: string, data: any)
local M = {}
local EMPTY_FUNCTION = function(_, message, context) end
---@type druid.logger
local empty_logger = {
trace = EMPTY_FUNCTION,
debug = EMPTY_FUNCTION,
info = EMPTY_FUNCTION,
warn = EMPTY_FUNCTION,
error = EMPTY_FUNCTION,
}
---@type druid.logger
local default_logger = {
trace = function(_, msg, data) print("TRACE: " .. msg, helper.table_to_string(data)) end,
debug = function(_, msg, data) print("DEBUG: " .. msg, helper.table_to_string(data)) end,
info = function(_, msg, data) print("INFO: " .. msg, helper.table_to_string(data)) end,
warn = function(_, msg, data) print("WARN: " .. msg, helper.table_to_string(data)) end,
error = function(_, msg, data) print("ERROR: " .. msg, helper.table_to_string(data)) end
}
local METATABLE = { __index = default_logger }
---@param logger druid.logger|table|nil
function M.set_logger(logger)
METATABLE.__index = logger or empty_logger
end
return setmetatable(M, METATABLE)