util.cache: Add support for creating a proxy table to a cache, that looks and acts...
[prosody.git] / core / loggingmanager.lua
index b47c2ea5114316d5db4dc680a7ad7d477595841c..e3a83817b5d239c2009bc0261b674ad71ef98b7b 100644 (file)
@@ -15,13 +15,9 @@ local io_open = io.open;
 local math_max, rep = math.max, string.rep;
 local os_date = os.date;
 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
-
--- COMPAT: This should no longer be needed since the addition of setvbuf calls
-if os.getenv("__FLUSH_LOG") then
-       local io_flush = io.flush;
-       local _io_write = io_write;
-       io_write = function(...) _io_write(...); io_flush(); end
-end
+local tostring = tostring;
+local select = select;
+local unpack = table.unpack or unpack; --luacheck: ignore 113
 
 local config = require "core.configmanager";
 local logger = require "util.logger";
@@ -35,7 +31,7 @@ local _ENV = nil;
 -- The log config used if none specified in the config file (see reload_logging for initialization)
 local default_logging;
 local default_file_logging;
-local default_timestamp = "%b %d %H:%M:%S";
+local default_timestamp = "%b %d %H:%M:%S ";
 -- The actual config loggingmanager is using
 local logging_config;
 
@@ -187,6 +183,8 @@ local function log_to_file(sink_config, logfile)
 
        if timestamps == true then
                timestamps = default_timestamp; -- Default format
+       elseif timestamps then
+               timestamps = timestamps .. " ";
        end
 
        if sink_config.buffer_mode ~= false then
@@ -197,20 +195,22 @@ local function log_to_file(sink_config, logfile)
        local sourcewidth = sink_config.source_width;
 
        return function (name, level, message, ...)
-               if timestamps then
-                       write(logfile, os_date(timestamps), " ");
+               local n = select('#', ...);
+               if n ~= 0 then
+                       local arg = { ... };
+                       for i = 1, n do
+                               arg[i] = tostring(arg[i]);
+                       end
+                       message = format(message, unpack(arg, 1, n));
                end
+
                if sourcewidth then
                        sourcewidth = math_max(#name+2, sourcewidth);
                        name = name ..  rep(" ", sourcewidth-#name);
                else
                        name = name .. "\t";
                end
-               if ... then
-                       write(logfile, name, level, "\t", format(message, ...), "\n");
-               else
-                       write(logfile, name, level, "\t", message, "\n");
-               end
+               write(logfile, timestamps and os_date(timestamps) or "", name, level, "\t", message, "\n");
        end
 end
 log_sink_types.file = log_to_file;