Software /
code /
prosody
Diff
core/loggingmanager.lua @ 1016:73afe3e30e97
core.loggingmanager: A new manager (yay!) to manage log output
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 21 Apr 2009 03:37:49 +0100 |
child | 1021:f9122efeaadd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/loggingmanager.lua Tue Apr 21 03:37:49 2009 +0100 @@ -0,0 +1,49 @@ + +local format, rep = string.format, string.rep; +local io_write = io.write; +local pcall = pcall; +local debug = debug; +local tostring = tostring; +local math_max = math.max; + +local logger = require "util.logger"; + +-- Global log function, because some people are too +-- lazy to get their own +_G.log = logger.init("general"); + +-- Disable log output, needs to read from config +-- logger.setwriter(function () end); + +local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring; +local do_pretty_printing = not os.getenv("WINDIR"); + +local logstyles = {}; + +--TODO: This should be done in config, but we don't have proper config yet +if do_pretty_printing then + logstyles["info"] = getstyle("bold"); + logstyles["warn"] = getstyle("bold", "yellow"); + logstyles["error"] = getstyle("bold", "red"); +end + +local sourcewidth = 20; +local math_max, rep = math.max, string.rep; +local function make_default_log_sink(level) + return function (name, _level, message, ...) + sourcewidth = math_max(#name+2, sourcewidth); + local namelen = #name; + if ... then + io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", format(message, ...), "\n"); + else + io_write(name, rep(" ", sourcewidth-namelen), getstring(logstyles[level], level), "\t", message, "\n"); + end + end +end + +-- Set default sinks +logger.add_level_sink("debug", make_default_log_sink("debug")); +logger.add_level_sink("info", make_default_log_sink("info")); +logger.add_level_sink("warn", make_default_log_sink("warn")); +logger.add_level_sink("error", make_default_log_sink("error")); +