mirror of
https://github.com/acedanger/dotfiles.git
synced 2025-12-05 22:30:13 -08:00
148 lines
4.8 KiB
Lua
148 lines
4.8 KiB
Lua
---@module "utils.class.logger"
|
|
---@author sravioli
|
|
---@license GNU-GPLv3
|
|
|
|
local wt = require "wezterm"
|
|
|
|
---@diagnostic disable-next-line: undefined-field
|
|
local G, log_info, log_warn, log_error = wt.GLOBAL, wt.log_info, wt.log_warn, wt.log_error
|
|
|
|
-- selene: allow(incorrect_standard_library_use)
|
|
local unpack = unpack or table.unpack
|
|
local inspect = require("utils.external.inspect").inspect
|
|
local levels = { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3 }
|
|
|
|
-- {{{1 Helpers
|
|
|
|
local h = {}
|
|
|
|
---Converts each given vararg to a string
|
|
---@param ... any
|
|
---@return ... string
|
|
h.stringify = function(...)
|
|
local args = { ... }
|
|
for i = 1, #args do
|
|
if type(args[i]) == "userdata" then
|
|
args[i] = tostring(args[i])
|
|
else
|
|
args[i] = inspect(args[i])
|
|
end
|
|
end
|
|
return unpack(args)
|
|
end
|
|
|
|
---Returns the appropriate log level
|
|
---@param level string|integer
|
|
---@return integer level log level converted to integer
|
|
h.get_level = function(level)
|
|
if type(level) == "string" then
|
|
level = levels[level:upper()]
|
|
end
|
|
return level
|
|
end
|
|
-- }}}
|
|
|
|
---@class Utils.Class.Logger
|
|
---@field identifier string
|
|
---@field enabled boolean
|
|
---@field log_level integer
|
|
local M = {}
|
|
M.__index = M
|
|
|
|
---Creates a new class instance
|
|
---
|
|
---Whether logging is enabled is globally controlled by the `wezterm.GLOBAL.enable_logging`
|
|
---variable. Setting it to `false` (either from the Debug overlay or from the configuration),
|
|
---will disable logging; the opposite happens when it is set to `true`.
|
|
---
|
|
---@param identifier? string indentifier that will be printed in brackets before the msg
|
|
---@param enabled? boolean whether to enable logging or not. defaults to true at warn lvl
|
|
---@return Utils.Class.Logger
|
|
function M:new(identifier, enabled)
|
|
return setmetatable({
|
|
identifier = identifier or "Logger",
|
|
enabled = G.enable_logging or enabled or true,
|
|
log_level = h.get_level(G.log_level or levels.WARN),
|
|
}, self)
|
|
end
|
|
|
|
---Logs a message with the specified log level
|
|
---
|
|
---Logs the given string to the Wezterm's debug overlay. The message can be either a
|
|
---simple string or a format string. The latter must only use `%s` placeholders since the
|
|
---function already takes care of stringifing any non-string value.
|
|
---
|
|
---@param level integer|string log level
|
|
---@param message string log message or format string
|
|
---@param ... any additional arguments to format into the message
|
|
function M:log(level, message, ...)
|
|
if not (G.enable_logging and self.enabled) then
|
|
return
|
|
end
|
|
|
|
if h.get_level(level) < self.log_level then
|
|
return
|
|
end
|
|
|
|
local msg = ("[%s] %s"):format(self.identifier, message:format(h.stringify(...)))
|
|
if (level == levels.DEBUG) or (level == levels.INFO) then
|
|
log_info(msg)
|
|
elseif level == levels.WARN then
|
|
log_warn(msg)
|
|
elseif level == levels.ERROR then
|
|
log_error(msg)
|
|
else
|
|
self:error("invalid log level: %s", level)
|
|
end
|
|
end
|
|
|
|
---Logs a debug level message to the Wezterm's debug overlay.
|
|
---
|
|
---Logs the given string to the Wezterm's debug overlay. The message can be either a
|
|
---simple string or a format string. The latter must only use `%s` placeholders since the
|
|
---function already takes care of stringifing any non-string value.
|
|
---
|
|
---@param message string log message or format string
|
|
---@param ... any additional arguments to format into the message
|
|
function M:debug(message, ...)
|
|
self:log(levels.DEBUG, "DEBUG: " .. message, ...)
|
|
end
|
|
|
|
---Logs a info level message to the Wezterm's debug overlay.
|
|
---
|
|
---Logs the given string to the Wezterm's debug overlay. The message can be either a
|
|
---simple string or a format string. The latter must only use `%s` placeholders since the
|
|
---function already takes care of stringifing any non-string value.
|
|
---
|
|
---@param message string log message or format string
|
|
---@param ... any additional arguments to format into the message
|
|
function M:info(message, ...)
|
|
self:log(levels.INFO, message, ...)
|
|
end
|
|
|
|
---Logs a warn level message to the Wezterm's debug overlay.
|
|
---
|
|
---Logs the given string to the Wezterm's debug overlay. The message can be either a
|
|
---simple string or a format string. The latter must only use `%s` placeholders since the
|
|
---function already takes care of stringifing any non-string value.
|
|
---
|
|
---@param message string log message or format string
|
|
---@param ... any additional arguments to format into the message
|
|
function M:warn(message, ...)
|
|
self:log(levels.WARN, message, ...)
|
|
end
|
|
|
|
---Logs an error level message to the Wezterm's debug overlay.
|
|
---
|
|
---Logs the given string to the Wezterm's debug overlay. The message can be either a
|
|
---simple string or a format string. The latter must only use `%s` placeholders since the
|
|
---function already takes care of stringifing any non-string value.
|
|
---
|
|
---@param message string log message or format string
|
|
---@param ... any additional arguments to format into the message
|
|
function M:error(message, ...)
|
|
self:log(levels.ERROR, message, ...)
|
|
end
|
|
|
|
return M
|