Files
cave.nvim/lua/cave/log/class_logger.lua
2024-10-02 14:58:20 +02:00

47 lines
1.2 KiB
Lua

local Logger = require "cave.log.logger"
local FunctionLogger = require "cave.log.function_logger"
local Meta = require "cave.meta"
local validate = Meta.validate
local Table = Meta.Table
---@class cave.ClassLogger : cave.Logger
local ClassLogger = Meta.derive("ClassLogger", Logger)
---@param cls_name string
function ClassLogger:init(cls_name)
local prefix = cls_name
Logger.init(self, prefix)
end
---@param cls_mt table
---@return cave.ClassLogger
function ClassLogger.new(cls_mt)
validate { cls_mt = { cls_mt, Table } }
local cls_name = Meta.like(cls_mt).repr
local logger = setmetatable({}, ClassLogger)
logger:init(cls_name)
return logger
end
---@param args_fmt string?
---@param ... any
---@return cave.FunctionLogger
function ClassLogger:call(args_fmt, ...)
local dbg_info
local fn_name
for l = 2, 1, -1 do
dbg_info = debug.getinfo(l, "n")
fn_name = dbg_info.name
if fn_name then break end
end
if dbg_info.namewhat == "method" then
fn_name = self.prefix .. ":" .. fn_name
elseif dbg_info.namewhat == "field" then
fn_name = self.prefix .. "." .. fn_name
end
return FunctionLogger.new(fn_name, args_fmt, ...):call()
end
return ClassLogger