Merge 0.8->trunk
[prosody.git] / core / loggingmanager.lua
index f8cba059297057ed4c0147008cdad60266604975..40b96d52b7359ecadc754028eedeb422c96bf7f5 100644 (file)
 local format, rep = string.format, string.rep;
 local pcall = pcall;
 local debug = debug;
-local tostring, setmetatable, rawset, pairs, ipairs, type = 
+local tostring, setmetatable, rawset, pairs, ipairs, type =
        tostring, setmetatable, rawset, pairs, ipairs, type;
 local io_open, io_write = io.open, io.write;
 local math_max, rep = math.max, string.rep;
 local os_date, os_getenv = os.date, os.getenv;
-local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
+local getstyle, setstyle = require "util.termcolours".getstyle, require "util.termcolours".setstyle;
 
 if os.getenv("__FLUSH_LOG") then
        local io_flush = io.flush;
@@ -89,9 +89,25 @@ end
 -- the log_sink_types table.
 function apply_sink_rules(sink_type)
        if type(logging_config) == "table" then
+               
+               if sink_type == "file" then
+                       for _, level in ipairs(logging_levels) do
+                               if type(logging_config[level]) == "string" then
+                                       add_rule({
+                                               to = "file",
+                                               filename = logging_config[level],
+                                               timestamps = true,
+                                               levels = { min = level },
+                                       });
+                               end
+                       end
+               end
+               
                for _, sink_config in pairs(logging_config) do
-                       if sink_config.to == sink_type then
+                       if (type(sink_config) == "table" and sink_config.to == sink_type) then
                                add_rule(sink_config);
+                       elseif (type(sink_config) == "string" and sink_config:match("^%*(.+)") == sink_type) then
+                               add_rule({ levels = { min = "debug" }, to = sink_type });
                        end
                end
        elseif type(logging_config) == "string" and (not logging_config:match("^%*")) and sink_type == "file" then
@@ -151,7 +167,9 @@ function reload_logging()
        logger.reset();
 
        default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } };
-       default_file_logging = { { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } };
+       default_file_logging = {
+               { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true }
+       };
        default_timestamp = "%b %d %H:%M:%S";
 
        logging_config = config.get("*", "core", "log") or default_logging;
@@ -199,7 +217,7 @@ function log_sink_types.stdout()
 end
 
 do
-       local do_pretty_printing = not os_getenv("WINDIR");
+       local do_pretty_printing = true;
        
        local logstyles = {};
        if do_pretty_printing then
@@ -226,10 +244,14 @@ do
                        if timestamps then
                                io_write(os_date(timestamps), " ");
                        end
+                       io_write(name, rep(" ", sourcewidth-namelen));
+                       setstyle(logstyles[level]);
+                       io_write(level);
+                       setstyle();
                        if ... then
-                               io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", format(message, ...), "\n");
+                               io_write("\t", format(message, ...), "\n");
                        else
-                               io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", message, "\n");
+                               io_write("\t", message, "\n");
                        end
                end
        end