This is now the best Lua logging library ever made.

This commit is contained in:
2026-09-16 18:53:51 -06:00
parent cff8435b13
commit e7d8c0f78b
+17 -10
View File
@@ -1,11 +1,8 @@
local stored_messages = {}
local display_levels = {}
local enable_logging = true
local message_limit = math.huge
-- USAGE: -- USAGE:
-- -- set arbitrary log levels to be printed immediately -- -- set arbitrary log levels to be printed immediately
-- log{ info = true, warning = true, } -- log{ info = true, warning = true, ducksauce = true, }
-- -- disable storage of messages depending on log level
-- log{ error = false, verbose = false, }
-- -- send anything (except nil) to a log level -- -- send anything (except nil) to a log level
-- log("bacom", true, "text", 5, function() end, {}) -- log("bacom", true, "text", 5, function() end, {})
-- -- print all messages saved at a particular log level -- -- print all messages saved at a particular log level
@@ -16,11 +13,20 @@ local message_limit = math.huge
-- log(50) -- warning: reaching large limits makes logging expensive -- log(50) -- warning: reaching large limits makes logging expensive
-- -- do anything to the stored messages (this example deletes them all) -- -- do anything to the stored messages (this example deletes them all)
-- log(function(messages) return {} end) -- log(function(messages) return {} end)
-- -- check if a log level is being displayed
-- if log.arbitrary_exit then log("arbitrary_exit") os.exit(1) end
return function(options, ...) local microlog = {} -- display_levels are stored directly here
local stored_messages = {}
local enable_logging = true
local message_limit = math.huge
return setmetatable(microlog, {
__call = function(options, ...)
local options_type = type(options) local options_type = type(options)
if (options_type == "string") and enable_logging then if (options_type == "string") and enable_logging then
if microlog[options] == false then return end
if not stored_messages[options] then stored_messages[options] = {} end if not stored_messages[options] then stored_messages[options] = {} end
local message_table = stored_messages[options] local message_table = stored_messages[options]
@@ -41,13 +47,13 @@ return function(options, ...)
-- store message (and print if in display_levels) -- store message (and print if in display_levels)
message_table[#message_table + 1] = current_message message_table[#message_table + 1] = current_message
if #message_table > message_limit then table.remove(message_table, 1) end if #message_table > message_limit then table.remove(message_table, 1) end
if display_levels[options] then print(current_message) end if microlog[options] then print(current_message) end
end end
-- set display_levels -- set display_levels
elseif options_type == "table" then elseif options_type == "table" then
for k,v in pairs(options) do for k,v in pairs(options) do
display_levels[k] = v microlog[k] = v
end end
elseif options_type == "number" then elseif options_type == "number" then
@@ -72,4 +78,5 @@ return function(options, ...)
local result = options(stored_messages) local result = options(stored_messages)
if type(result) == "table" then stored_messages = result end if type(result) == "table" then stored_messages = result end
end end
end end
})