-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.lua
69 lines (55 loc) · 1.77 KB
/
log.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
LogLevel = {
TRACE = 0,
INFO = 1,
ERROR = 2,
}
LOG_LEVEL = LogLevel.INFO
LOG_FILE = {}
LOG_IO = {}
function openLog(logPrefix)
if LOG_IO[logPrefix] ~= nil then
LOG_IO[logPrefix].close()
end
LOG_FILE[logPrefix] = "logs/" .. logPrefix .. "_d" .. os.day() .. "_t" .. os.time() .. ".log"
LOG_IO[logPrefix] = fs.open(LOG_FILE[logPrefix], "w")
info("Logging started at " .. textutils.formatTime(os.time()) .. " on the " .. os.day() .. "th day. System has been running for " .. os.clock() .. " seconds and the log file is " .. LOG_FILE[logPrefix])
end
function getLevel()
return LOG_LEVEL
end
function setLevel(level)
assert(type(level) == "number", "Log level must be a number. Please use logger.LogLevel to avoid errors!")
assert(level >= LogLevel.TRACE, "Unknown log level: " .. level .. ". Please use logger.LogLevel to avoid errors!")
assert(level <= LogLevel.ERROR, "Unknown log level: " .. level .. ". Please use logger.LogLevel to avoid errors!")
LOG_LEVEL = level
end
function logIO(message, logLevel, printStackTrace)
if LOG_LEVEL > logLevel then
return
end
local logPrefix = debug.getinfo(3, 'S').short_src
if LOG_IO[logPrefix] == nil then
openLog(logPrefix)
end
message = tostring(message)
print(message)
local callerName = debug.getinfo(3, "n").name
local callerLine = debug.getinfo(3, 'l').currentline
message = callerName .. ":" .. callerLine .. " - " .. message
if printStackTrace then
local stackTrace = debug.traceback(message, 3)
LOG_IO[logPrefix].write(stackTrace)
else
LOG_IO[logPrefix].writeLine(message)
end
LOG_IO[logPrefix].flush()
end
function trace(message)
logIO(message, LogLevel.TRACE, false)
end
function info(message)
logIO(message, LogLevel.INFO, false)
end
function error(message, error)
logIO(message, LogLevel.ERROR, true)
end