Annotate

core/loggingmanager.lua @ 11369:87105a9a11df

util.datamanager: Support iterating over any file extension The 'typ' argument to all other functions is the actual file extension, but not here for some reason. May need this for iterating over the .bin files created by mod_http_file_share in the future.
author Kim Alvefur <zash@zash.se>
date Sun, 07 Feb 2021 19:23:33 +0100
parent 9927:1460c4966262
child 11641:b03053ec6dcf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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
8228
cda9db4b881d loggingmanager, mod_posix: Import util.format correctly (fixes #985)
Kim Alvefur <zash@zash.se>
parents: 8227
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;
7134
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: 7133
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: 7133
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;
7133
ac142f5209d9 loggingmanager: Write out color code, log level and reset code in one call
Kim Alvefur <zash@zash.se>
parents: 7132
diff changeset
16 local getstyle, getstring = require "util.termcolours".getstyle, require "util.termcolours".getstring;
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
17
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 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
19 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
20
9927
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
21 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: 9925
diff changeset
22 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: 9925
diff changeset
23
6779
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
24 local _ENV = nil;
8555
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8355
diff changeset
25 -- 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
26
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
27 -- 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
28 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
29 local default_file_logging;
7137
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
30 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
31 -- 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
32 local logging_config;
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33
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
34 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
35 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
36 local get_levels;
4427
ae71ae5ddcfc loggingmanager: Remove unused 'critical' level
Matthew Wild <mwild1@gmail.com>
parents: 4141
diff changeset
37 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
38
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
39 -- 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
40 -- 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
41 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
42 local sink_maker = log_sink_types[sink_config.to];
6617
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
43 if not sink_maker then
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
44 return; -- No such sink type
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
45 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
46
6617
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
47 -- Create sink
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
48 local sink = sink_maker(sink_config);
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
49
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
50 -- Set sink for all chosen levels
9925
8d0112413997 Backed out changeset 3eea63a68e0f
Matthew Wild <mwild1@gmail.com>
parents: 9902
diff changeset
51 for level in pairs(get_levels(sink_config.levels or logging_levels)) do
6617
a455dac79f58 loggingmanager: Improve code structure (removes empty if branch)
Matthew Wild <mwild1@gmail.com>
parents: 5776
diff changeset
52 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
53 end
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 end
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55
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
56 -- 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
57 -- 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
58 -- 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
59 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
60 if type(logging_config) == "table" then
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
61
4141
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
62 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
63 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
64 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
65 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
66 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
67 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
68 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
69 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
70 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
71 });
ef94984c44a0 loggingmanager: Allow specifying a sink type in per-level logging config (thanks ruskie)
Matthew Wild <mwild1@gmail.com>
parents: 4140
diff changeset
72 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
73 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
74 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
75 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
76 });
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
77 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
78 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
79 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
80
4140
e463e1df1bda loggingmanager: Iterate over logging config rules using ipairs rather than pairs
Matthew Wild <mwild1@gmail.com>
parents: 4124
diff changeset
81 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
82 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
83 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
84 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
85 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
86 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
87 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
88 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
89 -- 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
90 -- 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
91 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
92 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
93 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
94 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
95 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
96 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
97 -- 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
98 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
99 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
100 end
1016
73afe3e30e97 core.loggingmanager: A new manager (yay!) to manage log output
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
102
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
103
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
104 --- 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
105 function get_levels(criteria, set)
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
106 set = set or {};
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
107 if type(criteria) == "string" then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
108 set[criteria] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
109 return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
110 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
111 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
112 if min or max then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
113 local in_range;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
114 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
115 if min == level then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
116 set[level] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
117 in_range = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
118 elseif max == 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 return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
121 elseif in_range then
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
122 set[level] = true;
2586
26ead5e16cd3 loggingmanager: Trailing whitespace
Matthew Wild <mwild1@gmail.com>
parents: 2139
diff changeset
123 end
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
124 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
125 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
126
1021
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
127 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
128 set[level] = true;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
129 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
130 return set;
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
131 end
f9122efeaadd core.loggingmanager: Filled out most code, and cleaned up
Matthew Wild <mwild1@gmail.com>
parents: 1016
diff changeset
132
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
133 -- Initialize config, etc. --
6779
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
134 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
135 local old_sink_types = {};
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
136
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
137 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
138 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
139 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
140 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
141
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
142 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
143
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
144 local debug_mode = config.get("*", "debug");
4123
0c9399a66b17 loggingmanager: Re-read 'debug' option on reload.
Waqas Hussain <waqas20@gmail.com>
parents: 4117
diff changeset
145
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
146 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
147 default_file_logging = {
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3514
diff changeset
148 { 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
149 };
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
150
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
151 logging_config = config.get("*", "log") or default_logging;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
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 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
154 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
155 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
156 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
157
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
158 --- 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
159
1080
b02290fd8a75 loggingmanager: Add a comment about 'nowhere' sink type
Matthew Wild <mwild1@gmail.com>
parents: 1078
diff changeset
160 -- Null sink, must enter log_sink_types *first*
7134
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: 7133
diff changeset
161 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
162 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
163 end
7134
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: 7133
diff changeset
164 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
165
7134
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: 7133
diff changeset
166 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: 7133
diff changeset
167 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: 7133
diff changeset
168 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: 7133
diff changeset
169 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: 7133
diff changeset
170 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: 7133
diff changeset
171 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
172
6719
0ef7a8c8fe8c loggingmanager: Rename function arguments to avoid name conflict [luacheck] (core/ is now luacheck-clean!)
Matthew Wild <mwild1@gmail.com>
parents: 6617
diff changeset
173 local timestamps = sink_config.timestamps;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
174
8355
45383e071ded loggingmanager: Make timestamps enabled by default in file sink (fixes #1004)
Kim Alvefur <zash@zash.se>
parents: 8229
diff changeset
175 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
176 timestamps = default_timestamp; -- Default format
7137
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
177 elseif timestamps then
4a5619a87b44 loggingmanager: Write out timestamps in same write() call as everything else
Kim Alvefur <zash@zash.se>
parents: 7136
diff changeset
178 timestamps = timestamps .. " ";
1078
24c9ee99d900 loggingmanager: Support prepending timestamps in file/console/stdout log sinks
Matthew Wild <mwild1@gmail.com>
parents: 1067
diff changeset
179 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5377
diff changeset
180
7125
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: 7006
diff changeset
181 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: 7006
diff changeset
182 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: 7006
diff changeset
183 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: 7006
diff changeset
184
7135
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: 7134
diff changeset
185 -- 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: 7134
diff changeset
186 local sourcewidth = sink_config.source_width;
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: 7134
diff changeset
187
8227
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
188 if sourcewidth then
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
189 return function (name, level, message, ...)
7135
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: 7134
diff changeset
190 sourcewidth = math_max(#name+2, sourcewidth);
8227
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
191 write(logfile, timestamps and os_date(timestamps) or "", name, rep(" ", sourcewidth-#name), level, "\t", format(message, ...), "\n");
7135
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: 7134
diff changeset
192 end
8227
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
193 else
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
194 return function (name, level, message, ...)
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
195 write(logfile, timestamps and os_date(timestamps) or "", name, "\t", level, "\t", format(message, ...), "\n");
325371632fe6 loggingmanager: Slight cleanup and optimization of file sink
Waqas Hussain <waqas20@gmail.com>
parents: 8226
diff changeset
196 end
7134
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: 7133
diff changeset
197 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: 7133
diff changeset
198 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: 7133
diff changeset
199 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: 7133
diff changeset
200
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: 7133
diff changeset
201 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: 7133
diff changeset
202 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: 7133
diff changeset
203 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: 7133
diff changeset
204 end
7136
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7135
diff changeset
205 if sink_config.source_width == nil then
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7135
diff changeset
206 sink_config.source_width = 20;
6c3a33e54399 loggingmanager: Make initial value for width of log name configurable
Kim Alvefur <zash@zash.se>
parents: 7135
diff changeset
207 end
7135
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: 7134
diff changeset
208 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
209 end
7134
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: 7133
diff changeset
210 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: 7133
diff changeset
211
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: 7133
diff changeset
212 local do_pretty_printing = true;
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: 7133
diff changeset
213
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: 7133
diff changeset
214 local 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: 7133
diff changeset
215 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: 7133
diff changeset
216 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: 7133
diff changeset
217 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: 7133
diff changeset
218 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: 7133
diff changeset
219 logstyles["error"] = getstyle("bold", "red");
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: 7133
diff changeset
220 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: 7133
diff changeset
221
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: 7133
diff changeset
222 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: 7133
diff changeset
223 -- Really if we don't want pretty colours then just use plain 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: 7133
diff changeset
224 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: 7133
diff changeset
225 if not 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: 7133
diff changeset
226 return logstdout;
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: 7133
diff changeset
227 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: 7133
diff changeset
228 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: 7133
diff changeset
229 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: 7133
diff changeset
230 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: 7133
diff changeset
231 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: 7133
diff changeset
232 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: 7133
diff changeset
233 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: 7133
diff changeset
234 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: 7133
diff changeset
235 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: 7133
diff changeset
236 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
237
9927
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
238 if have_pposix then
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
239 local syslog_opened;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
240 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: 9925
diff changeset
241 if not syslog_opened then
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
242 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: 9925
diff changeset
243 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: 9925
diff changeset
244 syslog_opened = true;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
245 end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
246 local syslog = pposix.syslog_log;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
247 return function (name, level, message, ...)
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
248 syslog(level, name, format(message, ...));
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
249 end;
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
250 end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
251 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: 9925
diff changeset
252 end
1460c4966262 loggingmanager, mod_posix: Move syslog to core, fixes #541 (in a way)
Matthew Wild <mwild1@gmail.com>
parents: 9925
diff changeset
253
6779
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
254 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
255 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
256 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
257 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
258 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
259
6779
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
260 return {
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
261 reload_logging = reload_logging;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
262 register_sink_type = register_sink_type;
6236668da30a core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents: 6719
diff changeset
263 }