47 lines
1.2 KiB
Lua
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
|