core/loggingmanager.lua
changeset 9906 3eea63a68e0f
parent 8753 7ae09468ad92
child 9929 8d0112413997
equal deleted inserted replaced
9905:c8b75239846c 9906:3eea63a68e0f
    16 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
    16 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
    17 
    17 
    18 local config = require "core.configmanager";
    18 local config = require "core.configmanager";
    19 local logger = require "util.logger";
    19 local logger = require "util.logger";
    20 
    20 
       
    21 local have_pposix, pposix = pcall(require, "util.pposix");
       
    22 have_pposix = have_pposix and pposix._VERSION == "0.4.4";
       
    23 
    21 local _ENV = nil;
    24 local _ENV = nil;
    22 -- luacheck: std none
    25 -- luacheck: std none
    23 
    26 
    24 -- The log config used if none specified in the config file (see reload_logging for initialization)
    27 -- The log config used if none specified in the config file (see reload_logging for initialization)
    25 local default_logging;
    28 local default_logging;
    43 
    46 
    44 	-- Create sink
    47 	-- Create sink
    45 	local sink = sink_maker(sink_config);
    48 	local sink = sink_maker(sink_config);
    46 
    49 
    47 	-- Set sink for all chosen levels
    50 	-- Set sink for all chosen levels
    48 	for level in pairs(get_levels(sink_config.levels or logging_levels)) do
    51 	local levels = get_levels(sink_config.levels or logging_levels);
       
    52 	for level in pairs(levels) do
    49 		logger.add_level_sink(level, sink);
    53 		logger.add_level_sink(level, sink);
    50 	end
    54 	end
    51 end
    55 end
    52 
    56 
    53 -- Search for all rules using a particular sink type, and apply
    57 -- Search for all rules using a particular sink type, and apply
   230 		return logstdout(name, level, message, ...);
   234 		return logstdout(name, level, message, ...);
   231 	end
   235 	end
   232 end
   236 end
   233 log_sink_types.console = log_to_console;
   237 log_sink_types.console = log_to_console;
   234 
   238 
       
   239 if have_pposix then
       
   240 	local syslog_opened;
       
   241 	local function log_to_syslog(sink_config) -- luacheck: ignore 212/sink_config
       
   242 		if not syslog_opened then
       
   243 			pposix.syslog_open(sink_config.syslog_name or "prosody", sink_config.syslog_facility or config.get("*", "syslog_facility"));
       
   244 			syslog_opened = true;
       
   245 		end
       
   246 		local syslog = pposix.syslog_log;
       
   247 		return function (name, level, message, ...)
       
   248 			syslog(level, name, format(message, ...));
       
   249 		end;
       
   250 	end
       
   251 	log_sink_types.syslog = log_to_syslog;
       
   252 end
       
   253 
   235 local function register_sink_type(name, sink_maker)
   254 local function register_sink_type(name, sink_maker)
   236 	local old_sink_maker = log_sink_types[name];
   255 	local old_sink_maker = log_sink_types[name];
   237 	log_sink_types[name] = sink_maker;
   256 	log_sink_types[name] = sink_maker;
   238 	return old_sink_maker;
   257 	return old_sink_maker;
   239 end
   258 end