mirror of
https://github.com/Insality/druid
synced 2025-11-26 10:50:54 +01:00
Add Druid logger
This commit is contained in:
@@ -2,6 +2,7 @@ local event = require("event.event")
|
||||
local events = require("event.events")
|
||||
local settings = require("druid.system.settings")
|
||||
local druid_instance = require("druid.system.druid_instance")
|
||||
local logger = require("druid.system.druid_logger")
|
||||
|
||||
local default_style = require("druid.styles.default.style")
|
||||
|
||||
@@ -193,4 +194,25 @@ function M.unregister_druid_as_widget()
|
||||
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
|
||||
|
||||
@@ -404,24 +404,44 @@ function M.is_multitouch_supported()
|
||||
end
|
||||
|
||||
|
||||
---Simple table to one-line string converter
|
||||
---Converts table to one-line string
|
||||
---@param t table
|
||||
---@return string
|
||||
function M.table_to_string(t)
|
||||
if not t then
|
||||
return ""
|
||||
---@param depth number?
|
||||
---@param result string|nil Internal parameter
|
||||
---@return string, boolean result String representation of table, Is max string length reached
|
||||
function M.table_to_string(t, depth, result)
|
||||
if type(t) ~= "table" then
|
||||
return tostring(t) or "", false
|
||||
end
|
||||
|
||||
local result = "{"
|
||||
depth = depth or 0
|
||||
result = result or "{"
|
||||
|
||||
for key, value in pairs(t) do
|
||||
if #result > 1 then
|
||||
result = result .. ", "
|
||||
end
|
||||
result = result .. key .. ": " .. value
|
||||
|
||||
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 .. "}"
|
||||
return result .. "}", false
|
||||
end
|
||||
|
||||
|
||||
|
||||
39
druid/system/druid_logger.lua
Normal file
39
druid/system/druid_logger.lua
Normal 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)
|
||||
Reference in New Issue
Block a user