Comparison

core/loggingmanager.lua @ 1067:21f41b06f1d2

loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
author Matthew Wild <mwild1@gmail.com>
date Wed, 29 Apr 2009 20:52:24 +0100
parent 1046:6fef969ff307
child 1078:24c9ee99d900
comparison
equal deleted inserted replaced
1065:3806173670f2 1067:21f41b06f1d2
17 17
18 module "loggingmanager" 18 module "loggingmanager"
19 19
20 -- The log config used if none specified in the config file 20 -- The log config used if none specified in the config file
21 local default_logging = { { to = "console" } }; 21 local default_logging = { { to = "console" } };
22 local default_file_logging = { { to = "file", levels = { min = "info" } } };
22 23
23 -- The actual config loggingmanager is using 24 -- The actual config loggingmanager is using
24 local logging_config = config.get("*", "core", "log") or default_logging; 25 local logging_config = config.get("*", "core", "log") or default_logging;
25 26
26 local apply_sink_rules; 27 local apply_sink_rules;
27 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; }); 28 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; });
28 local get_levels; 29 local get_levels;
29 local logging_levels = { "debug", "info", "warn", "error", "critical" } 30 local logging_levels = { "debug", "info", "warn", "error", "critical" }
30 31
32 -- Put a rule into action. Requires that the sink type has already been registered.
33 -- This function is called automatically when a new sink type is added [see apply_sink_rules()]
31 local function add_rule(sink_config) 34 local function add_rule(sink_config)
32 local sink_maker = log_sink_types[sink_config.to]; 35 local sink_maker = log_sink_types[sink_config.to];
33 if sink_maker then 36 if sink_maker then
34 if sink_config.levels and not sink_config.source then 37 if sink_config.levels and not sink_config.source then
35 -- Create sink 38 -- Create sink
63 else 66 else
64 -- No such sink type 67 -- No such sink type
65 end 68 end
66 end 69 end
67 70
68 -- Search for all rules using a particular sink type, 71 -- Search for all rules using a particular sink type, and apply
69 -- and apply them 72 -- them. Called automatically when a new sink type is added to
73 -- the log_sink_types table.
70 function apply_sink_rules(sink_type) 74 function apply_sink_rules(sink_type)
71 if type(logging_config) == "table" then 75 if type(logging_config) == "table" then
72 for _, sink_config in pairs(logging_config) do 76 for _, sink_config in pairs(logging_config) do
73 if sink_config.to == sink_type then 77 if sink_config.to == sink_type then
74 add_rule(sink_config); 78 add_rule(sink_config);
75 end 79 end
76 end 80 end
77 elseif type(logging_config) == "string" and sink_type == "file" then 81 elseif type(logging_config) == "string" and (not logging_config:match("^%*")) and sink_type == "file" then
78 -- User specified simply a filename, and the "file" sink type 82 -- User specified simply a filename, and the "file" sink type
79 -- was just added 83 -- was just added
84 for _, sink_config in pairs(default_file_logging) do
85 sink_config.filename = logging_config;
86 add_rule(sink_config);
87 sink_config.filename = nil;
88 end
80 end 89 end
81 end 90 end
82 91
83 92
84 93