Mercurial > prosody-hg
comparison core/loggingmanager.lua @ 1078:24c9ee99d900
loggingmanager: Support prepending timestamps in file/console/stdout log sinks
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 30 Apr 2009 03:05:26 +0100 |
| parents | 21f41b06f1d2 |
| children | b02290fd8a75 |
comparison
equal
deleted
inserted
replaced
| 1077:d6a885cacd8c | 1078:24c9ee99d900 |
|---|---|
| 4 local debug = debug; | 4 local debug = debug; |
| 5 local tostring, setmetatable, rawset, pairs, ipairs, type = | 5 local tostring, setmetatable, rawset, pairs, ipairs, type = |
| 6 tostring, setmetatable, rawset, pairs, ipairs, type; | 6 tostring, setmetatable, rawset, pairs, ipairs, type; |
| 7 local io_open, io_write = io.open, io.write; | 7 local io_open, io_write = io.open, io.write; |
| 8 local math_max, rep = math.max, string.rep; | 8 local math_max, rep = math.max, string.rep; |
| 9 local os_getenv = os.getenv; | 9 local os_date, os_getenv = os.date, os.getenv; |
| 10 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring; | 10 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring; |
| 11 | 11 |
| 12 local config = require "core.configmanager"; | 12 local config = require "core.configmanager"; |
| 13 | 13 |
| 14 local logger = require "util.logger"; | 14 local logger = require "util.logger"; |
| 18 module "loggingmanager" | 18 module "loggingmanager" |
| 19 | 19 |
| 20 -- The log config used if none specified in the config file | 20 -- The log config used if none specified in the config file |
| 21 local default_logging = { { to = "console" } }; | 21 local default_logging = { { to = "console" } }; |
| 22 local default_file_logging = { { to = "file", levels = { min = "info" } } }; | 22 local default_file_logging = { { to = "file", levels = { min = "info" } } }; |
| 23 | 23 local default_timestamp = "%b %d %T"; |
| 24 -- The actual config loggingmanager is using | 24 -- The actual config loggingmanager is using |
| 25 local logging_config = config.get("*", "core", "log") or default_logging; | 25 local logging_config = config.get("*", "core", "log") or default_logging; |
| 26 | 26 |
| 27 local apply_sink_rules; | 27 local apply_sink_rules; |
| 28 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; }); | 28 local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; }); |
| 128 | 128 |
| 129 -- Column width for "source" (used by stdout and console) | 129 -- Column width for "source" (used by stdout and console) |
| 130 local sourcewidth = 20; | 130 local sourcewidth = 20; |
| 131 | 131 |
| 132 function log_sink_types.stdout() | 132 function log_sink_types.stdout() |
| 133 local timestamps = config.timestamps; | |
| 134 | |
| 135 if timestamps == true then | |
| 136 timestamps = default_timestamp; -- Default format | |
| 137 end | |
| 138 | |
| 133 return function (name, level, message, ...) | 139 return function (name, level, message, ...) |
| 134 sourcewidth = math_max(#name+2, sourcewidth); | 140 sourcewidth = math_max(#name+2, sourcewidth); |
| 135 local namelen = #name; | 141 local namelen = #name; |
| 142 if timestamps then | |
| 143 io_write(os_date(timestamps), " "); | |
| 144 end | |
| 136 if ... then | 145 if ... then |
| 137 io_write(name, rep(" ", sourcewidth-namelen), level, "\t", format(message, ...), "\n"); | 146 io_write(name, rep(" ", sourcewidth-namelen), level, "\t", format(message, ...), "\n"); |
| 138 else | 147 else |
| 139 io_write(name, rep(" ", sourcewidth-namelen), level, "\t", message, "\n"); | 148 io_write(name, rep(" ", sourcewidth-namelen), level, "\t", message, "\n"); |
| 140 end | 149 end |
| 154 -- Really if we don't want pretty colours then just use plain stdout | 163 -- Really if we don't want pretty colours then just use plain stdout |
| 155 if not do_pretty_printing then | 164 if not do_pretty_printing then |
| 156 return log_sink_types.stdout(config); | 165 return log_sink_types.stdout(config); |
| 157 end | 166 end |
| 158 | 167 |
| 168 local timestamps = config.timestamps; | |
| 169 | |
| 170 if timestamps == true then | |
| 171 timestamps = default_timestamp; -- Default format | |
| 172 end | |
| 173 | |
| 159 return function (name, level, message, ...) | 174 return function (name, level, message, ...) |
| 160 sourcewidth = math_max(#name+2, sourcewidth); | 175 sourcewidth = math_max(#name+2, sourcewidth); |
| 161 local namelen = #name; | 176 local namelen = #name; |
| 177 if timestamps then | |
| 178 io_write(os_date(timestamps), " "); | |
| 179 end | |
| 162 if ... then | 180 if ... then |
| 163 io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", format(message, ...), "\n"); | 181 io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", format(message, ...), "\n"); |
| 164 else | 182 else |
| 165 io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", message, "\n"); | 183 io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", message, "\n"); |
| 166 end | 184 end |
| 173 local logfile = io_open(log, "a+"); | 191 local logfile = io_open(log, "a+"); |
| 174 if not logfile then | 192 if not logfile then |
| 175 return function () end | 193 return function () end |
| 176 end | 194 end |
| 177 | 195 |
| 196 local timestamps = config.timestamps; | |
| 197 | |
| 198 if timestamps == true then | |
| 199 timestamps = default_timestamp; -- Default format | |
| 200 end | |
| 201 | |
| 178 local write, format, flush = logfile.write, format, logfile.flush; | 202 local write, format, flush = logfile.write, format, logfile.flush; |
| 179 return function (name, level, message, ...) | 203 return function (name, level, message, ...) |
| 204 if timestamps then | |
| 205 write(logfile, os_date(timestamps), " "); | |
| 206 end | |
| 180 if ... then | 207 if ... then |
| 181 write(logfile, name, "\t", level, "\t", format(message, ...), "\n"); | 208 write(logfile, name, "\t", level, "\t", format(message, ...), "\n"); |
| 182 else | 209 else |
| 183 write(logfile, name, "\t" , level, "\t", message, "\n"); | 210 write(logfile, name, "\t" , level, "\t", message, "\n"); |
| 184 end | 211 end |
