From 44084aa0c53b15e0c3c8d1e2d5408228f3156f3a Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 21 Apr 2009 03:37:49 +0100 Subject: core.loggingmanager: A new manager (yay!) to manage log output --- core/loggingmanager.lua | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 core/loggingmanager.lua (limited to 'core') diff --git a/core/loggingmanager.lua b/core/loggingmanager.lua new file mode 100644 index 00000000..973edbf4 --- /dev/null +++ b/core/loggingmanager.lua @@ -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")); + -- cgit v1.2.3