core/loggingmanager.lua
author Matthew Wild <mwild1@gmail.com>
Wed, 27 Mar 2024 15:35:15 +0000
branch0.12
changeset 13469 54a936345aaa
parent 12251 dcad8940f072
child 12976 ead41e25ebc0
permissions -rw-r--r--
prosodyctl check: Warn about invalid domain names in the config file This ensures that domain names of virtual hosts and components are valid in XMPP, and that they are encoded correctly.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1344
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2922
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2922
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
     4
--
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1344
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1344
diff changeset
     6
-- COPYING file in the source package for more information.
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1344
diff changeset
     7
--
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
8231
cda9db4b881d loggingmanager, mod_posix: Import util.format correctly (fixes #985)
Kim Alvefur <zash@zash.se>
parents: 8230
diff changeset
     9
local format = require "util.format".format;
5001
78a3d275715a loggingmanager: Remove unused variables
Matthew Wild <mwild1@gmail.com>
parents: 4627
diff changeset
    10
local setmetatable, rawset, pairs, ipairs, type =
78a3d275715a loggingmanager: Remove unused variables
Matthew Wild <mwild1@gmail.com>
parents: 4627
diff changeset
    11
	setmetatable, rawset, pairs, ipairs, type;
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
    12
local stdout = io.stdout;
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
    13
local io_open = io.open;
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    14
local math_max, rep = math.max, string.rep;
5001
78a3d275715a loggingmanager: Remove unused variables
Matthew Wild <mwild1@gmail.com>
parents: 4627
diff changeset
    15
local os_date = os.date;
7136
ac142f5209d9 loggingmanager: Write out color code, log level and reset code in one call
Kim Alvefur <zash@zash.se>
parents: 7135
diff changeset
    16
local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
11647
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
    17
local st = require "util.stanza";
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    18
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    19
local config = require "core.configmanager";
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
local logger = require "util.logger";
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
    21
9931
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
    22
local have_pposix, pposix = pcall(require, "util.pposix");
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
    23
have_pposix = have_pposix and pposix._VERSION == "0.4.0";
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
    24
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
    25
local _ENV = nil;
8558
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8358
diff changeset
    26
-- luacheck: std none
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    27
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
    28
-- The log config used if none specified in the config file (see reload_logging for initialization)
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
    29
local default_logging;
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
    30
local default_file_logging;
7140
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7139
diff changeset
    31
local default_timestamp = "%b %d %H:%M:%S ";
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    32
-- The actual config loggingmanager is using
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
    33
local logging_config;
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    35
local apply_sink_rules;
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    36
local log_sink_types = setmetatable({}, { __newindex = function (t, k, v) rawset(t, k, v); apply_sink_rules(k); end; });
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
    37
local get_levels;
4427
ae71ae5ddcfc loggingmanager: Remove unused 'critical' level
Matthew Wild <mwild1@gmail.com>
parents: 4141
diff changeset
    38
local logging_levels = { "debug", "info", "warn", "error" }
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
11645
b03053ec6dcf core.loggingmanager: Support passing log messages trough a filter
Kim Alvefur <zash@zash.se>
parents: 9931
diff changeset
    40
local function id(x) return x end
b03053ec6dcf core.loggingmanager: Support passing log messages trough a filter
Kim Alvefur <zash@zash.se>
parents: 9931
diff changeset
    41
1067
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    42
-- Put a rule into action. Requires that the sink type has already been registered.
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    43
-- This function is called automatically when a new sink type is added [see apply_sink_rules()]
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    44
local function add_rule(sink_config)
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    45
	local sink_maker = log_sink_types[sink_config.to];
6620
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    46
	if not sink_maker then
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    47
		return; -- No such sink type
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    48
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
    49
6620
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    50
	-- Create sink
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    51
	local sink = sink_maker(sink_config);
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    52
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    53
	-- Set sink for all chosen levels
9929
8d0112413997 Backed out changeset 3eea63a68e0f
Matthew Wild <mwild1@gmail.com>
parents: 9906
diff changeset
    54
	for level in pairs(get_levels(sink_config.levels or logging_levels)) do
6620
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
    55
		logger.add_level_sink(level, sink);
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
	end
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
end
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
1067
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    59
-- Search for all rules using a particular sink type, and apply
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    60
-- them. Called automatically when a new sink type is added to
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    61
-- the log_sink_types table.
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    62
function apply_sink_rules(sink_type)
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    63
	if type(logging_config) == "table" then
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
    64
4141
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    65
		for _, level in ipairs(logging_levels) do
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    66
			if type(logging_config[level]) == "string" then
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    67
				local value = logging_config[level];
5272
1e555909f23d core.loggingmanager: Don't create file log rules from [level] = "*sink" style config
Kim Alvefur <zash@zash.se>
parents: 5001
diff changeset
    68
				if sink_type == "file" and not value:match("^%*") then
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    69
					add_rule({
4141
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    70
						to = sink_type;
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    71
						filename = value;
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    72
						timestamps = true;
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    73
						levels = { min = level };
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    74
					});
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    75
				elseif value == "*"..sink_type then
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    76
					add_rule({
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    77
						to = sink_type;
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
    78
						levels = { min = level };
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    79
					});
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    80
				end
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    81
			end
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    82
		end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
    83
4140
e463e1df1bda loggingmanager: Iterate over logging config rules using ipairs rather than pairs
Matthew Wild <mwild1@gmail.com>
parents: 4124
diff changeset
    84
		for _, sink_config in ipairs(logging_config) do
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    85
			if (type(sink_config) == "table" and sink_config.to == sink_type) then
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    86
				add_rule(sink_config);
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    87
			elseif (type(sink_config) == "string" and sink_config:match("^%*(.+)") == sink_type) then
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
    88
				add_rule({ levels = { min = "debug" }, to = sink_type });
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
    89
			end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
    90
		end
1067
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    91
	elseif type(logging_config) == "string" and (not logging_config:match("^%*")) and sink_type == "file" then
2586
26ead5e16cd3 loggingmanager: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2139
diff changeset
    92
		-- User specified simply a filename, and the "file" sink type
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
    93
		-- was just added
1067
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    94
		for _, sink_config in pairs(default_file_logging) do
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    95
			sink_config.filename = logging_config;
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    96
			add_rule(sink_config);
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    97
			sink_config.filename = nil;
21f41b06f1d2 loggingmanager: Add ability to set 'log' config option to a filename, which causes all levels >= info to be logged to that file
Matthew Wild <mwild1@gmail.com>
parents: 1046
diff changeset
    98
		end
1101
fb096ca4b296 loggingmanager: Support for specifying a single sink with *sinkname (*syslog should now work)
Matthew Wild <mwild1@gmail.com>
parents: 1080
diff changeset
    99
	elseif type(logging_config) == "string" and logging_config:match("^%*(.+)") == sink_type then
fb096ca4b296 loggingmanager: Support for specifying a single sink with *sinkname (*syslog should now work)
Matthew Wild <mwild1@gmail.com>
parents: 1080
diff changeset
   100
		-- Log all levels (debug+) to this sink
fb096ca4b296 loggingmanager: Support for specifying a single sink with *sinkname (*syslog should now work)
Matthew Wild <mwild1@gmail.com>
parents: 1080
diff changeset
   101
		add_rule({ levels = { min = "debug" }, to = sink_type });
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   102
	end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   103
end
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   105
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   106
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   107
--- Helper function to get a set of levels given a "criteria" table
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   108
function get_levels(criteria, set)
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   109
	set = set or {};
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   110
	if type(criteria) == "string" then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   111
		set[criteria] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   112
		return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   113
	end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   114
	local min, max = criteria.min, criteria.max;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   115
	if min or max then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   116
		local in_range;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   117
		for _, level in ipairs(logging_levels) do
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   118
			if min == level then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   119
				set[level] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   120
				in_range = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   121
			elseif max == level then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   122
				set[level] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   123
				return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   124
			elseif in_range then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   125
				set[level] = true;
2586
26ead5e16cd3 loggingmanager: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2139
diff changeset
   126
			end
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   127
		end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   128
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   129
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   130
	for _, level in ipairs(criteria) do
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   131
		set[level] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   132
	end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   133
	return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   134
end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
   135
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   136
-- Initialize config, etc. --
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   137
local function reload_logging()
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   138
	local old_sink_types = {};
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   139
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   140
	for name, sink_maker in pairs(log_sink_types) do
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   141
		old_sink_types[name] = sink_maker;
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   142
		log_sink_types[name] = nil;
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   143
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   144
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   145
	logger.reset();
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   146
5377
898454038524 core.*: Complete removal of all traces of the "core" section and section-related code.
Kim Alvefur <zash@zash.se>
parents: 5272
diff changeset
   147
	local debug_mode = config.get("*", "debug");
4123
0c9399a66b17 loggingmanager: Re-read 'debug' option on reload.
Waqas Hussain <waqas20@gmail.com>
parents: 4117
diff changeset
   148
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   149
	default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } };
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
   150
	default_file_logging = {
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3514
diff changeset
   151
		{ to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true }
3514
fdae08713c67 core.loggingmanager: Logging config simplification - allow [level] = filename and *sink to appear in the config table
Matthew Wild <mwild1@gmail.com>
parents: 3438
diff changeset
   152
	};
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   153
5377
898454038524 core.*: Complete removal of all traces of the "core" section and section-related code.
Kim Alvefur <zash@zash.se>
parents: 5272
diff changeset
   154
	logging_config = config.get("*", "log") or default_logging;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   155
3358
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   156
	for name, sink_maker in pairs(old_sink_types) do
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   157
		log_sink_types[name] = sink_maker;
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   158
	end
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   159
end
b5a812cf698c loggingmanager: Add reload_logging() method, which gets called on any config reload, to reset util.logger and remove and re-add all sink types to perform a full reload of the logging system without a restart.
Matthew Wild <mwild1@gmail.com>
parents: 3045
diff changeset
   160
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   161
--- Definition of built-in logging sinks ---
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   162
1080
b02290fd8a75 loggingmanager: Add a comment about 'nowhere' sink type
Matthew Wild <mwild1@gmail.com>
parents: 1078
diff changeset
   163
-- Null sink, must enter log_sink_types *first*
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   164
local function log_to_nowhere()
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   165
	return function () return false; end;
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   166
end
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   167
log_sink_types.nowhere = log_to_nowhere;
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   168
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   169
local function log_to_file(sink_config, logfile)
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   170
	logfile = logfile or io_open(sink_config.filename, "a+");
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   171
	if not logfile then
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   172
		return log_to_nowhere(sink_config);
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   173
	end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   174
	local write = logfile.write;
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   175
6722
0ef7a8c8fe8c loggingmanager: Rename function arguments to avoid name conflict [luacheck] (core/ is now luacheck-clean!)
Matthew Wild <mwild1@gmail.com>
parents: 6620
diff changeset
   176
	local timestamps = sink_config.timestamps;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   177
8358
45383e071ded loggingmanager: Make timestamps enabled by default in file sink (fixes #1004)
Kim Alvefur <zash@zash.se>
parents: 8232
diff changeset
   178
	if timestamps == true or timestamps == nil then
1078
24c9ee99d900 loggingmanager: Support prepending timestamps in file/console/stdout log sinks
Matthew Wild <mwild1@gmail.com>
parents: 1067
diff changeset
   179
		timestamps = default_timestamp; -- Default format
7140
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7139
diff changeset
   180
	elseif timestamps then
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7139
diff changeset
   181
		timestamps = timestamps .. " ";
1078
24c9ee99d900 loggingmanager: Support prepending timestamps in file/console/stdout log sinks
Matthew Wild <mwild1@gmail.com>
parents: 1067
diff changeset
   182
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
   183
7128
631c47a65519 loggingmanager: Call setvbuf on output files, defaulting to line-buffered, instead of manually calling flush(). Adds 'buffer_mode' option to sink configuration for stdout, console and file sinks.
Matthew Wild <mwild1@gmail.com>
parents: 7009
diff changeset
   184
	if sink_config.buffer_mode ~= false then
631c47a65519 loggingmanager: Call setvbuf on output files, defaulting to line-buffered, instead of manually calling flush(). Adds 'buffer_mode' option to sink configuration for stdout, console and file sinks.
Matthew Wild <mwild1@gmail.com>
parents: 7009
diff changeset
   185
		logfile:setvbuf(sink_config.buffer_mode or "line");
631c47a65519 loggingmanager: Call setvbuf on output files, defaulting to line-buffered, instead of manually calling flush(). Adds 'buffer_mode' option to sink configuration for stdout, console and file sinks.
Matthew Wild <mwild1@gmail.com>
parents: 7009
diff changeset
   186
	end
631c47a65519 loggingmanager: Call setvbuf on output files, defaulting to line-buffered, instead of manually calling flush(). Adds 'buffer_mode' option to sink configuration for stdout, console and file sinks.
Matthew Wild <mwild1@gmail.com>
parents: 7009
diff changeset
   187
7138
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   188
	-- Column width for "source" (used by stdout and console)
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   189
	local sourcewidth = sink_config.source_width;
11645
b03053ec6dcf core.loggingmanager: Support passing log messages trough a filter
Kim Alvefur <zash@zash.se>
parents: 9931
diff changeset
   190
	local filter = sink_config.filter or id;
7138
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   191
8230
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8229
diff changeset
   192
	if sourcewidth then
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8229
diff changeset
   193
		return function (name, level, message, ...)
7138
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   194
			sourcewidth = math_max(#name+2, sourcewidth);
11645
b03053ec6dcf core.loggingmanager: Support passing log messages trough a filter
Kim Alvefur <zash@zash.se>
parents: 9931
diff changeset
   195
			write(logfile, timestamps and os_date(timestamps) or "", name, rep(" ", sourcewidth-#name), level, "\t", filter(format(message, ...)), "\n");
7138
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   196
		end
8230
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8229
diff changeset
   197
	else
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8229
diff changeset
   198
		return function (name, level, message, ...)
11645
b03053ec6dcf core.loggingmanager: Support passing log messages trough a filter
Kim Alvefur <zash@zash.se>
parents: 9931
diff changeset
   199
			write(logfile, timestamps and os_date(timestamps) or "", name, "\t", level, "\t", filter(format(message, ...)), "\n");
8230
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8229
diff changeset
   200
		end
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   201
	end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   202
end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   203
log_sink_types.file = log_to_file;
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   204
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   205
local function log_to_stdout(sink_config)
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   206
	if not sink_config.timestamps then
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   207
		sink_config.timestamps = false;
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   208
	end
7139
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7138
diff changeset
   209
	if sink_config.source_width == nil then
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7138
diff changeset
   210
		sink_config.source_width = 20;
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7138
diff changeset
   211
	end
7138
0b614b7333f1 loggingmanager: Move logic for adaptive column width into file sink, append tab if disabled (fixes separation between name and level in plain file sinks)
Kim Alvefur <zash@zash.se>
parents: 7137
diff changeset
   212
	return log_to_file(sink_config, stdout);
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   213
end
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   214
log_sink_types.stdout = log_to_stdout;
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   215
11661
46fa1b939e88 core.loggingmanager: Disable pretty printing when not connected to a tty
Kim Alvefur <zash@zash.se>
parents: 11647
diff changeset
   216
local do_pretty_printing = not have_pposix or pposix.isatty(stdout);
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   217
11647
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   218
local logstyles, pretty;
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   219
if do_pretty_printing then
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   220
	logstyles = {};
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   221
	logstyles["info"] = getstyle("bold");
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   222
	logstyles["warn"] = getstyle("bold", "yellow");
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   223
	logstyles["error"] = getstyle("bold", "red");
11647
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   224
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   225
	pretty = st.pretty_print;
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   226
end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   227
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   228
local function log_to_console(sink_config)
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   229
	-- Really if we don't want pretty colours then just use plain stdout
12251
dcad8940f072 core.loggingmanager: Add FIXME about supporting console logging to stderr
Kim Alvefur <zash@zash.se>
parents: 11661
diff changeset
   230
	-- FIXME refactor to allow console logging with colours on stderr
11647
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   231
	if not do_pretty_printing then
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   232
		return log_to_stdout(sink_config);
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   233
	end
f534eeee1552 core.loggingmanager: Pretty-print logged XML snippets in console
Kim Alvefur <zash@zash.se>
parents: 11645
diff changeset
   234
	sink_config.filter = pretty;
7137
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   235
	local logstdout = log_to_stdout(sink_config);
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   236
	return function (name, level, message, ...)
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   237
		local logstyle = logstyles[level];
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   238
		if logstyle then
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   239
			level = getstring(logstyle, level);
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   240
		end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   241
		return logstdout(name, level, message, ...);
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   242
	end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   243
end
b7b6b1d01224 loggingmanager: Refactor the console log sink to re-use the stdout sink which in turn uses the file sink (tailcalls!)
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
   244
log_sink_types.console = log_to_console;
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   245
9931
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   246
if have_pposix then
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   247
	local syslog_opened;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   248
	local function log_to_syslog(sink_config) -- luacheck: ignore 212/sink_config
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   249
		if not syslog_opened then
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   250
			local facility = sink_config.syslog_facility or config.get("*", "syslog_facility");
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   251
			pposix.syslog_open(sink_config.syslog_name or "prosody", facility);
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   252
			syslog_opened = true;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   253
		end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   254
		local syslog = pposix.syslog_log;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   255
		return function (name, level, message, ...)
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   256
			syslog(level, name, format(message, ...));
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   257
		end;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   258
	end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   259
	log_sink_types.syslog = log_to_syslog;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   260
end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9929
diff changeset
   261
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   262
local function register_sink_type(name, sink_maker)
1031
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   263
	local old_sink_maker = log_sink_types[name];
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   264
	log_sink_types[name] = sink_maker;
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   265
	return old_sink_maker;
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   266
end
ec013f93de81 core.loggingmanager: Refactoring, converted to a module. Now possible to register additional sink types (think syslog) from other modules
Matthew Wild <mwild1@gmail.com>
parents: 1024
diff changeset
   267
6782
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   268
return {
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   269
	reload_logging = reload_logging;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   270
	register_sink_type = register_sink_type;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6722
diff changeset
   271
}