+-- Prosody IM
+-- Copyright (C) 2008-2009 Matthew Wild
+-- Copyright (C) 2008-2009 Waqas Hussain
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
local format, rep = string.format, string.rep;
local pcall = pcall;
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";
+if os.getenv("__FLUSH_LOG") then
+ local io_flush = io.flush;
+ local _io_write = io_write;
+ io_write = function(...) _io_write(...); io_flush(); end
+end
+local config = require "core.configmanager";
+local eventmanager = require "core.eventmanager";
local logger = require "util.logger";
+local debug_mode = config.get("*", "core", "debug");
_G.log = logger.init("general");
-- The log config used if none specified in the config file
local default_logging = { { to = "console" } };
-local default_file_logging = { { to = "file", levels = { min = "info" } } };
+local default_file_logging = { { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } };
local default_timestamp = "%b %d %T";
-- The actual config loggingmanager is using
local logging_config = config.get("*", "core", "log") or default_logging;
return function (name, level, message, ...)
sourcewidth = math_max(#name+2, sourcewidth);
local namelen = #name;
+
if timestamps then
io_write(os_date(timestamps), " ");
end
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;
- if timestamps == true then
+ if timestamps == nil or timestamps == true then
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), " ");