-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.lua
More file actions
196 lines (168 loc) · 4.36 KB
/
Copy pathinit.lua
File metadata and controls
196 lines (168 loc) · 4.36 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
local mod_logger = {
modname = core.get_current_modname(),
log = function() end,
error = function() end,
warn = function() end,
action = function() end,
info = function() end,
debug = function() end
}
local LogLevel = {
SILENT = 0,
ERROR = 1,
WARN = 2,
WARNING = 2,
ACTION = 3,
INFO = 4,
DEBUG = 5
}
--- Checks logging level.
--
-- @param lvl
-- Logging level string.
-- @return
-- Logging level integer or `nil` if invalid level.
local check_level = function(lvl)
lvl = lvl or "INFO"
return LogLevel[lvl:upper()]
end
--- Configured logging verbosity level.
local logging_level = check_level(core.settings:get("mod_log_level"))
--- Base logging function.
--
-- @param mod_name
-- Name of logging mod.
-- @param lvl
-- Logging level. If its value is `nil` the standard message logging level ("info") is used (same
-- as `log_mod(msg)`). Supported log levels:
-- - "error"
-- - "warn" | "warning"
-- - "action"
-- - "info"
-- - "debug"
-- @param msg
-- Logging message text.
local log_mod = function(mod_name, lvl, msg)
if logging_level < 1 then
-- logging disabled
return
end
if msg == nil then
msg = lvl
lvl = nil
end
local message_level = check_level(lvl)
if message_level == nil then
mod_logger.warn("Unknown log level: \""..tostring(lvl).."\"")
return
elseif logging_level < message_level then
-- don't show message of higher verbosity
return
end
lvl = lvl and lvl:lower()
if lvl == "info" then
-- "info" is default logging level, same as `nil` for core.log
lvl = nil
elseif lvl == "warn" then
-- core logger only recognizes "warning"
lvl = "warning"
end
local prefix = "["..mod_name.."]"
if lvl ~= nil then
-- exclude prefixes already added by Luanti engine
if lvl ~= "action" and lvl ~= "warning" and lvl ~= "error" then
prefix = lvl:upper()..prefix
end
end
msg = prefix.." "..msg
if not lvl or lvl == "debug" then
core.log(msg)
else
core.log(lvl, msg)
end
end
--- Adds logging functions to a table.
--
-- Functions added to `logger` table:
-- - `logger.log(lvl, msg)`
-- - `logger.log(msg)`
-- - `logger.warn(msg)`
-- - `logger.error(msg)`
-- - `logger.debug(msg)`
--
-- @param name
-- Logger name that will prefix messages. If omitted, mod name will be used.
-- @param logger
-- Table to which logging functions will be added. If omitted, a new table will be created &
-- returned.
-- @return
-- `logger` or new table with logging functions.
add_mod_logger = function(name, logger)
if logger == nil then
if type(name) == "table" then
logger = name
name = nil
else
logger = {}
end
end
-- mod name is used by default
name = name ~= nil and name or core.get_current_modname()
if type(logger) ~= "table" then
mod_logger.error("invalid parameter `logger` for `register_mod_logger`, must be table")
return
elseif type(name) ~= "string" then
mod_logger.error("invalid parameter `name` for `register_mod_logger`, must be string")
return
end
-- main logging function
logger.log = function(lvl, msg)
log_mod(name, lvl, msg)
end
-- wrapper for logging info level messages
logger.info = function(msg)
log_mod(name, nil, msg)
end
-- wrapper for logging action level messages
logger.action = function(msg)
log_mod(name, "action", msg)
end
-- wrapper for logging warning level messages
logger.warn = function(msg)
log_mod(name, "warn", msg)
end
-- wrapper for logging error level messages
logger.error = function(msg)
log_mod(name, "error", msg)
end
-- wrapper for logging debug level message
logger.debug = function(msg)
log_mod(name, "debug", msg)
end
mod_logger.debug("registered logger '"..name.."'")
return logger
end
-- backward compat
register_mod_logger = add_mod_logger
-- ensure using valid logging level
if logging_level == nil then
core.log("warning", "["..mod_logger.modname.."] Invalid value for \"mod_log_level\" setting, defaulting to \"INFO\" ...")
logging_level = LogLevel.INFO
end
for k, v in pairs(LogLevel) do
if v == logging_level then
core.log("action", "["..mod_logger.modname.."] Mod logging level: "..k)
break
end
end
-- register logger for this mod
register_mod_logger(mod_logger)
-- DEBUG:
--~ if logging_level == LogLevel.DEBUG then
--~ mod_logger.info("testing mod logger functions ...")
--~ for k, v in pairs(mod_logger) do
--~ if type(v) == "function" then
--~ v(k.." message")
--~ end
--~ end
--~ end