aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2009-04-29 20:52:24 +0100
committerMatthew Wild <mwild1@gmail.com>2009-04-29 20:52:24 +0100
commit3015c946d18d28566fd92201291a33b0872eccc1 (patch)
tree8d9b4a1cba9b65e5b819bf61541d33b26d258071 /core
parente241b85a56b96bbda1719448a08e68cf5b8eed56 (diff)
downloadprosody-3015c946d18d28566fd92201291a33b0872eccc1.tar.gz
prosody-3015c946d18d28566fd92201291a33b0872eccc1.zip
loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Diffstat (limited to 'core')
-rw-r--r--core/loggingmanager.lua15
1 files changed, 12 insertions, 3 deletions
diff --git a/core/loggingmanager.lua b/core/loggingmanager.lua
index 298e4c45..5dff6a34 100644
--- a/core/loggingmanager.lua
+++ b/core/loggingmanager.lua
@@ -19,6 +19,7 @@ module "loggingmanager"
-- 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 log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset
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 @@ local function add_rule(sink_config)
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 @@ function apply_sink_rules(sink_type)
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