Skip to content

Commit b86f5bd

Browse files
committed
Update logger
1 parent 0df0d75 commit b86f5bd

File tree

3 files changed

+92
-44
lines changed

3 files changed

+92
-44
lines changed

lang/internal/lang_logger.lua

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---@class lang.logger
2+
---@field trace fun(_, msg: string, data: any)
3+
---@field debug fun(_, msg: string, data: any)
4+
---@field info fun(_, msg: string, data: any)
5+
---@field warn fun(_, msg: string, data: any)
6+
---@field error fun(_, msg: string, data: any)
7+
local M = {}
8+
9+
local EMPTY_FUNCTION = function(_, message, context) end
10+
11+
---@type lang.logger
12+
local empty_logger = {
13+
trace = EMPTY_FUNCTION,
14+
debug = EMPTY_FUNCTION,
15+
info = EMPTY_FUNCTION,
16+
warn = EMPTY_FUNCTION,
17+
error = EMPTY_FUNCTION,
18+
}
19+
20+
---@type lang.logger
21+
local default_logger = {
22+
trace = function(_, msg, data) print("TRACE: " .. msg, M.table_to_string(data)) end,
23+
debug = function(_, msg, data) print("DEBUG: " .. msg, M.table_to_string(data)) end,
24+
info = function(_, msg, data) print("INFO: " .. msg, M.table_to_string(data)) end,
25+
warn = function(_, msg, data) print("WARN: " .. msg, M.table_to_string(data)) end,
26+
error = function(_, msg, data) print("ERROR: " .. msg, M.table_to_string(data)) end
27+
}
28+
29+
local METATABLE = { __index = default_logger }
30+
31+
function M.set_logger(logger)
32+
METATABLE.__index = logger or empty_logger
33+
end
34+
35+
36+
---Converts table to one-line string
37+
---@param t table
38+
---@param depth number?
39+
---@param result string|nil Internal parameter
40+
---@return string, boolean result String representation of table, Is max string length reached
41+
function M.table_to_string(t, depth, result)
42+
if type(t) ~= "table" then
43+
return tostring(t) or "", false
44+
end
45+
46+
depth = depth or 0
47+
result = result or "{"
48+
49+
for key, value in pairs(t) do
50+
if #result > 1 then
51+
result = result .. ", "
52+
end
53+
54+
if type(value) == "table" then
55+
if depth == 0 then
56+
local table_len = 0
57+
for _ in pairs(value) do
58+
table_len = table_len + 1
59+
end
60+
result = result .. key .. ": {... #" .. table_len .. "}"
61+
else
62+
local convert_result, is_limit = M.table_to_string(value, depth - 1, "")
63+
result = result .. key .. ": {" .. convert_result
64+
if is_limit then
65+
break
66+
end
67+
end
68+
else
69+
result = result .. key .. ": " .. tostring(value)
70+
end
71+
end
72+
73+
return result .. "}", false
74+
end
75+
76+
77+
return setmetatable(M, METATABLE)

lang/lang.lua

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
local lang_internal = require("lang.lang_internal")
1414
local lang_debug_page = require("lang.lang_debug_page")
15+
local logger = require("lang.internal.lang_logger")
1516

1617
---@class lang
1718
local M = {}
@@ -74,7 +75,7 @@ end
7475
---@param lang_on_start string? Language code to set on start, override saved language
7576
function M.init(available_langs, lang_on_start)
7677
if not available_langs or #available_langs == 0 then
77-
lang_internal.logger:error("No available languages provided to init")
78+
logger:error("No available languages provided to init")
7879
return
7980
end
8081

@@ -100,7 +101,7 @@ function M.init(available_langs, lang_on_start)
100101

101102
-- Validate the target language exists, fallback to default if not
102103
if not is_lang_available(target_lang) then
103-
lang_internal.logger:warn("Target language not available, falling back to default", {
104+
logger:warn("Target language not available, falling back to default", {
104105
target_lang = target_lang,
105106
default_lang = default_lang
106107
})
@@ -114,7 +115,7 @@ end
114115
---Set logger for lang module. Pass nil to use empty logger
115116
---@param logger_instance lang.logger|table|nil
116117
function M.set_logger(logger_instance)
117-
lang_internal.logger = logger_instance or lang_internal.empty_logger
118+
logger.set_logger(logger_instance)
118119
end
119120

120121

@@ -152,15 +153,15 @@ end
152153
---@param on_lang_changed function?
153154
function M.set_lang(lang_id, on_lang_changed)
154155
if not lang_id then
155-
lang_internal.logger:error("Language id cannot be nil")
156+
logger:error("Language id cannot be nil")
156157
return
157158
end
158159

159160
local previous_lang = M.state.lang
160161
local lang_data = get_lang_data(lang_id)
161162

162163
if not lang_data then
163-
lang_internal.logger:error("Lang not found", lang_id)
164+
logger:error("Lang not found", lang_id)
164165
return
165166
end
166167

@@ -176,12 +177,12 @@ function M.set_lang(lang_id, on_lang_changed)
176177
if on_lang_changed then
177178
on_lang_changed()
178179
end
179-
lang_internal.logger:info("Lang changed", { previous_lang = previous_lang, lang = lang_id })
180+
logger:info("Lang changed", { previous_lang = previous_lang, lang = lang_id })
180181
else
181-
lang_internal.logger:error("Failed to parse lang content", path_str)
182+
logger:error("Failed to parse lang content", path_str)
182183
end
183184
end, function(err)
184-
lang_internal.logger:error("Failed to load lang file", err)
185+
logger:error("Failed to load lang file", err)
185186
end)
186187
return
187188
end
@@ -195,11 +196,11 @@ function M.set_lang(lang_id, on_lang_changed)
195196
elseif is_json and path_str then
196197
M.load_from_json(path_str, lang_id)
197198
else
198-
lang_internal.logger:error("Lang format not supported", lang_data.path or "unknown")
199+
logger:error("Lang format not supported", lang_data.path or "unknown")
199200
return
200201
end
201202

202-
lang_internal.logger:info("Lang changed", { previous_lang = previous_lang, lang = lang_id })
203+
logger:info("Lang changed", { previous_lang = previous_lang, lang = lang_id })
203204
if on_lang_changed then
204205
on_lang_changed()
205206
end
@@ -216,11 +217,11 @@ function M.load_from_json(lang_path, locale_id)
216217

217218
local is_parsed, lang_data = pcall(lang_internal.load_json, lang_path)
218219
if not is_parsed then
219-
lang_internal.logger:error("Can't load or parse lang file. Check the JSON file is valid", lang_path)
220+
logger:error("Can't load or parse lang file. Check the JSON file is valid", lang_path)
220221
return nil
221222
end
222223
if not lang_data then
223-
lang_internal.logger:error("Lang file not found", lang_path)
224+
logger:error("Lang file not found", lang_path)
224225
return nil
225226
end
226227

@@ -241,12 +242,12 @@ function M.load_from_csv(csv_path, locale_id)
241242

242243
local langs_data = lang_internal.load_csv(csv_path)
243244
if not langs_data then
244-
lang_internal.logger:error("Can't load or parse lang file. Check the CSV file is valid", csv_path)
245+
logger:error("Can't load or parse lang file. Check the CSV file is valid", csv_path)
245246
return nil
246247
end
247248

248249
if not langs_data[locale_id] then
249-
lang_internal.logger:error("Lang code not found", locale_id)
250+
logger:error("Lang code not found", locale_id)
250251
return nil
251252
end
252253

lang/lang_internal.lua

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
local csv = require("lang.csv")
22

3-
---@class lang.logger
4-
---@field trace fun(logger: lang.logger, message: string, data: any|nil)
5-
---@field debug fun(logger: lang.logger, message: string, data: any|nil)
6-
---@field info fun(logger: lang.logger, message: string, data: any|nil)
7-
---@field warn fun(logger: lang.logger, message: string, data: any|nil)
8-
---@field error fun(logger: lang.logger, message: string, data: any|nil)
9-
10-
113
local M = {}
124

135
M.SYSTEM_LANG = sys.get_sys_info().language
@@ -29,28 +21,6 @@ function M.split(s, sep)
2921
end
3022

3123

32-
--- Use empty function to save a bit of memory
33-
local EMPTY_FUNCTION = function(_, message, context) end
34-
35-
---@type lang.logger
36-
M.empty_logger = {
37-
trace = EMPTY_FUNCTION,
38-
debug = EMPTY_FUNCTION,
39-
info = EMPTY_FUNCTION,
40-
warn = EMPTY_FUNCTION,
41-
error = EMPTY_FUNCTION,
42-
}
43-
44-
---@type lang.logger
45-
M.logger = {
46-
trace = function(_, msg, data) print("TRACE:", msg, data) end,
47-
debug = function(_, msg, data) print("DEBUG:", msg, data) end,
48-
info = function(_, msg, data) print("INFO:", msg, data) end,
49-
warn = function(_, msg, data) print("WARN:", msg, data) end,
50-
error = function(_, msg, data) print("ERROR:", msg, data) end
51-
}
52-
53-
5424
---Load JSON file from game resources folder (by relative path to game.project)
5525
---Return nil if file not found or error
5626
---@param json_path string

0 commit comments

Comments
 (0)