loggingmanager: Stringify all arguments to format so we can finally see the *real...
authorKim Alvefur <zash@zash.se>
Thu, 4 Feb 2016 19:45:37 +0000 (20:45 +0100)
committerKim Alvefur <zash@zash.se>
Thu, 4 Feb 2016 19:45:37 +0000 (20:45 +0100)
core/loggingmanager.lua

index 64e1ea77b9cb7d33537f9e57097e5d06fb37b92a..77d31964d0d3545b321ac18799e2be396081767a 100644 (file)
@@ -15,6 +15,8 @@ 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;
+local tostring = tostring;
+local unpack = table.unpack or unpack;
 
 local config = require "core.configmanager";
 local logger = require "util.logger";
@@ -192,17 +194,22 @@ local function log_to_file(sink_config, logfile)
        local sourcewidth = sink_config.source_width;
 
        return function (name, level, message, ...)
+               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, timestamps and os_date(timestamps) or "", name, level, "\t", format(message, ...), "\n");
-               else
-                       write(logfile, timestamps and os_date(timestamps) or "", 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;