Mercurial > prosody-hg
comparison core/loggingmanager.lua @ 3358:b5a812cf698c
loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 14 Jul 2010 01:25:32 +0100 |
| parents | ff5b3932e5f2 |
| children | 9a8b716fda14 |
comparison
equal
deleted
inserted
replaced
| 3357:1dd83dd2b832 | 3358:b5a812cf698c |
|---|---|
| 24 end | 24 end |
| 25 | 25 |
| 26 local config = require "core.configmanager"; | 26 local config = require "core.configmanager"; |
| 27 local eventmanager = require "core.eventmanager"; | 27 local eventmanager = require "core.eventmanager"; |
| 28 local logger = require "util.logger"; | 28 local logger = require "util.logger"; |
| 29 local prosody = prosody; | |
| 30 | |
| 29 local debug_mode = config.get("*", "core", "debug"); | 31 local debug_mode = config.get("*", "core", "debug"); |
| 30 | 32 |
| 31 _G.log = logger.init("general"); | 33 _G.log = logger.init("general"); |
| 32 | 34 |
| 33 module "loggingmanager" | 35 module "loggingmanager" |
| 34 | 36 |
| 35 -- The log config used if none specified in the config file | 37 -- The log config used if none specified in the config file (see reload_logging for initialization) |
| 36 local default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } }; | 38 local default_logging; |
| 37 local default_file_logging = { { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } }; | 39 local default_file_logging; |
| 38 local default_timestamp = "%b %d %H:%M:%S"; | 40 local default_timestamp = "%b %d %H:%M:%S"; |
| 39 -- The actual config loggingmanager is using | 41 -- The actual config loggingmanager is using |
| 40 local logging_config = config.get("*", "core", "log") or default_logging; | 42 local logging_config; |
| 41 | 43 |
| 42 local apply_sink_rules; | 44 local apply_sink_rules; |
| 43 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; }); | 45 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; }); |
| 44 local get_levels; | 46 local get_levels; |
| 45 local logging_levels = { "debug", "info", "warn", "error", "critical" } | 47 local logging_levels = { "debug", "info", "warn", "error", "critical" } |
| 136 set[level] = true; | 138 set[level] = true; |
| 137 end | 139 end |
| 138 return set; | 140 return set; |
| 139 end | 141 end |
| 140 | 142 |
| 143 -- Initialize config, etc. -- | |
| 144 function reload_logging() | |
| 145 local old_sink_types = {}; | |
| 146 | |
| 147 for name, sink_maker in pairs(log_sink_types) do | |
| 148 old_sink_types[name] = sink_maker; | |
| 149 log_sink_types[name] = nil; | |
| 150 end | |
| 151 | |
| 152 logger.reset(); | |
| 153 | |
| 154 default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } }; | |
| 155 default_file_logging = { { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } }; | |
| 156 default_timestamp = "%b %d %H:%M:%S"; | |
| 157 | |
| 158 logging_config = config.get("*", "core", "log") or default_logging; | |
| 159 | |
| 160 | |
| 161 for name, sink_maker in pairs(old_sink_types) do | |
| 162 log_sink_types[name] = sink_maker; | |
| 163 end | |
| 164 | |
| 165 prosody.events.fire_event("logging-reloaded"); | |
| 166 end | |
| 167 | |
| 168 reload_logging(); | |
| 169 prosody.events.add_handler("config-reloaded", reload_logging); | |
| 170 | |
| 141 --- Definition of built-in logging sinks --- | 171 --- Definition of built-in logging sinks --- |
| 142 | 172 |
| 143 -- Null sink, must enter log_sink_types *first* | 173 -- Null sink, must enter log_sink_types *first* |
| 144 function log_sink_types.nowhere() | 174 function log_sink_types.nowhere() |
| 145 return function () return false; end; | 175 return function () return false; end; |
| 213 if not logfile then | 243 if not logfile then |
| 214 return empty_function; | 244 return empty_function; |
| 215 end | 245 end |
| 216 local write, flush = logfile.write, logfile.flush; | 246 local write, flush = logfile.write, logfile.flush; |
| 217 | 247 |
| 218 eventmanager.add_event_hook("reopen-log-files", function () | 248 prosody.events.add_handler("logging-reloading", function () |
| 219 if logfile then | 249 if logfile then |
| 220 logfile:close(); | 250 logfile:close(); |
| 221 end | |
| 222 logfile = io_open(log, "a+"); | |
| 223 if not logfile then | |
| 224 write, flush = empty_function, empty_function; | |
| 225 else | |
| 226 write, flush = logfile.write, logfile.flush; | |
| 227 end | 251 end |
| 228 end); | 252 end); |
| 229 | 253 |
| 230 local timestamps = config.timestamps; | 254 local timestamps = config.timestamps; |
| 231 | 255 |
