Rotating Logs on Turtles¶
Computers have limited disk space. Using RotatingFileHandler prevents a single log file
from filling the computer's drive.
Mining Turtle with Size-Capped Log¶
-- miner.lua
local logger = require("logger.lua")
local fmt = logger.Formatter("{asctime} [{level}] {message}")
local h = logger.RotatingFileHandler(fmt, "miner.log", 4096, 2)
local log = logger.new("miner", true)
log:addHandler(h)
log:info("Mining program started")
local blocksMined = 0
local fuel = 0
for i = 1, 100 do
-- fake mining
blocksMined = blocksMined + 1
fuel = fuel - 1
if blocksMined % 10 == 0 then
log:info("Progress: mined " .. blocksMined .. " blocks", {
blocks = blocksMined,
fuel = fuel
})
end
if fuel < 50 then
log:warn("Fuel critically low: {fuel}",{fuel=fuel})
end
if fuel <= 0 then
log:critical("Out of fuel!!")
break
end
end
log:info("Mining session ended. Total blocks: " .. blocksMined)
After running, the turtle's disk will contain at most ~4 KB + 2 backups of log data:
miner.log ← current session (being written)
miner.log.1 ← previous session
miner.log.2 ← session before that
Farming Turtle¶
-- farmer.lua
local logger = require("logger.lua")
local fmt = logger.Formatter("{asctime} [{level}] {message}")
local h = logger.RotatingFileHandler(fmt, "farm.log", 2048, 1)
local log = logger.new("farmer", true)
log:addHandler(h)
log:info("Farm program started")
local harvests = 0
for cycle = 1, 50 do
harvests = harvests + 8 -- 8 crops per cycle
log:info("Harvest cycle {cycle} complete", {
totalHarvested = harvests,
cycle=cycle
})
end
log:info("Farm run complete: {harvests} items harvested",{harvests=harvests})
With only 2 KB cap and 1 backup, this uses minimal disk space.
Combining Console + File¶
local logger = require("logger.lua")
local log = logger.new("turtle")
-- rotating file
local fileFmt = logger.Formatter("{asctime} [{level}] {message}")
local fileH = logger.RotatingFileHandler(fileFmt, "turtle.log", 4096, 3)
log:addHandler(fileH)
log:info("Now logging to both terminal and rotating file")
Since logger.new() attaches a default TerminalHandler, you only need to add the file
handler.
Related¶
- RotatingFileHandler handler details
- Multi-Handler Setups combining handler types