modlib/log.lua

67 lines
1.8 KiB
Lua
Raw Normal View History

2020-02-09 01:39:54 +01:00
-- Log helpers - write to log, force writing to file
minetest.mkdir(minetest.get_worldpath().."/logs")
channels={}
last_day=os.date("%d")
function get_path(logname)
return minetest.get_worldpath().."/logs/"..logname
end
function create_channel(title)
local dir=get_path(title)
minetest.mkdir(dir)
channels[title]={dirname=dir,queue={}}
write(title, "Initialisation")
end
function write(channelname, msg)
local channel=channels[channelname]
local current_day=os.date("%d")
if current_day ~= last_day then
last_day=current_day
write_to_file(channelname, channel, os.date("%Y-%m-%d"))
end
table.insert(channel.queue, os.date("[%H:%M:%S] ")..msg)
end
function write_to_all(msg)
for channelname, _ in pairs(channels) do
write(channelname, msg)
end
end
function write_to_file(name, channel, current_date)
if not channel then
channel=channels[name]
end
if #(channel.queue) > 0 then
local filename=channel.dirname.."/"..(current_date or os.date("%Y-%m-%d"))..".txt"
local rope={}
for _, msg in ipairs(channel.queue) do
table.insert(rope, msg)
end
modlib.file.append(filename, table.concat(rope, "\n").."\n")
channels[name].queue={}
end
end
function write_all_to_file()
local current_date=os.date("%Y-%m-%d")
for name, channel in pairs(channels) do
write_to_file(name, channel, current_date)
end
end
local timer=0
minetest.register_globalstep(function(dtime)
timer=timer+dtime
if timer > 5 then
write_all_to_file()
timer=0
end
end)
minetest.register_on_mods_loaded(function()
write_to_all("Mods loaded")
end)
minetest.register_on_shutdown(function()
write_to_all("Shutdown")
write_all_to_file()
end)