--- Logger interface ---@class Logger ---@field available_outputs table Available outputs to use in the logger ---@field output file* The open file to write to local Logger = { available_outputs = { stdout = io.stdout }, output = io.stdout } Logger.__index = Logger --- Create a new logger instance ---@param output? file* io.stdout by default, [see Logger.available_outputs](lua://Logger.available_outputs) for possible values ---@return Logger function Logger:new(output) local obj = { output = output or Logger.available_outputs.stdout } setmetatable(obj, self) self.__index = self self:open() return obj end function Logger:open() self:log("\n\n") self:log("Opening logger...\n") end function Logger:close() self:log("Closing logger...") self:log("\n\n") self.output:close() end --- Write data to ouput, it passes the arguments directly to file:write(...) ---@param ... string|number the data to write function Logger:log(...) self.output:write(...) self.output:write("\n") self.output:flush() end return Logger