Diff

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
line wrap: on
line diff
--- a/core/loggingmanager.lua	Wed Apr 29 02:08:12 2009 +0100
+++ b/core/loggingmanager.lua	Wed Apr 29 20:52:24 2009 +0100
@@ -19,6 +19,7 @@
 
 -- The log config used if none specified in the config file
 local default_logging = { { to = "console" } };
+local default_file_logging = { { to = "file", levels = { min = "info" } } };
 
 -- The actual config loggingmanager is using
 local logging_config = config.get("*", "core", "log") or default_logging;
@@ -28,6 +29,8 @@
 local get_levels;
 local logging_levels = { "debug", "info", "warn", "error", "critical" }
 
+-- Put a rule into action. Requires that the sink type has already been registered.
+-- This function is called automatically when a new sink type is added [see apply_sink_rules()]
 local function add_rule(sink_config)
 	local sink_maker = log_sink_types[sink_config.to];
 	if sink_maker then
@@ -65,8 +68,9 @@
 	end
 end
 
--- Search for all rules using a particular sink type,
--- and apply them
+-- Search for all rules using a particular sink type, and apply
+-- them. Called automatically when a new sink type is added to
+-- the log_sink_types table.
 function apply_sink_rules(sink_type)
 	if type(logging_config) == "table" then
 		for _, sink_config in pairs(logging_config) do
@@ -74,9 +78,14 @@
 				add_rule(sink_config);
 			end
 		end
-	elseif type(logging_config) == "string" and sink_type == "file" then
+	elseif type(logging_config) == "string" and (not logging_config:match("^%*")) and sink_type == "file" then
 		-- User specified simply a filename, and the "file" sink type 
 		-- was just added
+		for _, sink_config in pairs(default_file_logging) do
+			sink_config.filename = logging_config;
+			add_rule(sink_config);
+			sink_config.filename = nil;
+		end
 	end
 end