X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=core%2Floggingmanager.lua;h=aa8f368d73e2fe962074974ba6378191b02d1531;hb=34215744d79b2fcf146b69a59007d104085dff4a;hp=ea0f497d0ef753d580d4f88ddc1037038594890a;hpb=3d2ae12b152160aa2fee8545a08a6aab4856fbdf;p=prosody.git diff --git a/core/loggingmanager.lua b/core/loggingmanager.lua index ea0f497d..aa8f368d 100644 --- a/core/loggingmanager.lua +++ b/core/loggingmanager.lua @@ -10,7 +10,7 @@ local os_date, os_getenv = os.date, os.getenv; local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring; local config = require "core.configmanager"; - +local eventmanager = require "core.eventmanager"; local logger = require "util.logger"; _G.log = logger.init("general"); @@ -86,6 +86,9 @@ function apply_sink_rules(sink_type) add_rule(sink_config); sink_config.filename = nil; end + elseif type(logging_config) == "string" and logging_config:match("^%*(.+)") == sink_type then + -- Log all levels (debug+) to this sink + add_rule({ levels = { min = "debug" }, to = sink_type }); end end @@ -187,12 +190,26 @@ do end end +local empty_function = function () end; function log_sink_types.file(config) local log = config.filename; local logfile = io_open(log, "a+"); if not logfile then - return function () end + return empty_function; end + local write, flush = logfile.write, logfile.flush; + + eventmanager.add_event_hook("reopen-log-files", function () + if logfile then + logfile:close(); + end + logfile = io_open(log, "a+"); + if not logfile then + write, flush = empty_function, empty_function; + else + write, flush = logfile.write, logfile.flush; + end + end); local timestamps = config.timestamps; @@ -200,7 +217,6 @@ function log_sink_types.file(config) timestamps = default_timestamp; -- Default format end - local write, format, flush = logfile.write, format, logfile.flush; return function (name, level, message, ...) if timestamps then write(logfile, os_date(timestamps), " ");