diff --git a/scada-common/log.lua b/scada-common/log.lua index fbe2d66..cf493eb 100644 --- a/scada-common/log.lua +++ b/scada-common/log.lua @@ -6,13 +6,42 @@ -- underscores are used since some of these names are used elsewhere (e.g. 'debug' is a lua table) local LOG_DEBUG = true +local LOG_PATH = "/log.txt" -local file_handle = fs.open("/log.txt", "a") +local file_handle = fs.open(LOG_PATH, "a") local _log = function (msg) local stamped = os.date("[%c] ") .. msg - file_handle.writeLine(stamped) - file_handle.flush() + + -- attempt to write log + local status, result = pcall(function () + file_handle.writeLine(stamped) + file_handle.flush() + end) + + -- if we don't have much space, we need to create a new log file + local delete_log = fs.getFreeSpace(LOG_PATH) < 100 + + if not status then + if result == "Out of space" then + delete_log = true + elseif result ~= nil then + print("unknown error writing to logfile: " .. result) + end + end + + if delete_log then + -- delete the old log file and open a new one + file_handle.close() + fs.delete(LOG_PATH) + file_handle = fs.open(LOG_PATH, "a") + + -- leave a message + local notif = os.date("[%c] ") .. "recycled log file" + file_handle.writeLine(notif) + file_handle.writeLine(stamped) + file_handle.flush() + end end function _debug(msg, trace)