kafo 5.1.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/doc/kafo_run.png +0 -0
- data/doc/kafo_run.uml +2 -0
- data/doc/plantuml.jar +0 -0
- data/lib/kafo/app_option/declaration.rb +19 -0
- data/lib/kafo/app_option/definition.rb +16 -0
- data/lib/kafo/configuration.rb +25 -7
- data/lib/kafo/exit_handler.rb +1 -1
- data/lib/kafo/help_builders/base.rb +5 -3
- data/lib/kafo/help_builders/basic.rb +13 -2
- data/lib/kafo/hook_context.rb +81 -18
- data/lib/kafo/hooking.rb +20 -13
- data/lib/kafo/kafo_configure.rb +127 -116
- data/lib/kafo/logger.rb +13 -123
- data/lib/kafo/logging.rb +127 -0
- data/lib/kafo/puppet_log_parser.rb +10 -4
- data/lib/kafo/scenario_manager.rb +10 -11
- data/lib/kafo/system_checker.rb +1 -1
- data/lib/kafo/version.rb +1 -1
- data/lib/kafo/wizard.rb +7 -7
- metadata +8 -4
data/lib/kafo/kafo_configure.rb
CHANGED
@@ -27,20 +27,71 @@ require 'kafo/hooking'
|
|
27
27
|
require 'kafo/exit_handler'
|
28
28
|
require 'kafo/scenario_manager'
|
29
29
|
require 'kafo/execution_environment'
|
30
|
+
require 'kafo/logging'
|
31
|
+
require 'kafo/app_option/declaration'
|
30
32
|
|
31
33
|
module Kafo
|
32
34
|
class KafoConfigure < Clamp::Command
|
33
35
|
include StringHelper
|
34
36
|
|
35
37
|
class << self
|
38
|
+
include AppOption::Declaration
|
39
|
+
|
36
40
|
attr_accessor :config, :root_dir, :config_file, :gem_root,
|
37
|
-
:module_dirs, :kafo_modules_dir, :verbose, :
|
41
|
+
:module_dirs, :kafo_modules_dir, :verbose, :logger,
|
38
42
|
:check_dirs, :exit_handler, :scenario_manager, :store
|
39
43
|
attr_writer :hooking
|
40
44
|
|
41
45
|
def hooking
|
42
46
|
@hooking ||= Hooking.new
|
43
47
|
end
|
48
|
+
|
49
|
+
def run
|
50
|
+
return super
|
51
|
+
rescue SystemExit
|
52
|
+
self.exit_handler.exit(self.exit_code) # fail in initialize
|
53
|
+
end
|
54
|
+
|
55
|
+
def exit(code, &block)
|
56
|
+
exit_handler.exit(code, &block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def exit_code
|
60
|
+
self.exit_handler.exit_code
|
61
|
+
end
|
62
|
+
|
63
|
+
def in_help_mode?
|
64
|
+
ARGV.include?('--help') || ARGV.include?('--full-help') || ARGV.include?('-h')
|
65
|
+
end
|
66
|
+
|
67
|
+
def help(*args)
|
68
|
+
kafo = args.pop
|
69
|
+
builder_class = kafo.full_help? ? HelpBuilders::Advanced : HelpBuilders::Basic
|
70
|
+
args.push builder_class.new(kafo.params)
|
71
|
+
super(*args)
|
72
|
+
end
|
73
|
+
|
74
|
+
def use_colors?
|
75
|
+
if config
|
76
|
+
colors = config.app[:colors]
|
77
|
+
else
|
78
|
+
colors = ARGV.include?('--no-colors') ? false : nil
|
79
|
+
colors = ARGV.include?('--colors') ? true : nil if colors.nil?
|
80
|
+
end
|
81
|
+
colors
|
82
|
+
end
|
83
|
+
|
84
|
+
def preset_color_scheme
|
85
|
+
match = ARGV.join(' ').match(/--color-of-background[ =](\w+)/)
|
86
|
+
background = match && match[1]
|
87
|
+
ColorScheme.new(:background => background, :colors => use_colors?).setup
|
88
|
+
end
|
89
|
+
|
90
|
+
def set_color_scheme
|
91
|
+
ColorScheme.new(
|
92
|
+
:background => config.app[:color_of_background],
|
93
|
+
:colors => use_colors?).setup
|
94
|
+
end
|
44
95
|
end
|
45
96
|
|
46
97
|
def initialize(*args)
|
@@ -65,9 +116,9 @@ module Kafo
|
|
65
116
|
request_config_reload if applied_total > 0
|
66
117
|
|
67
118
|
if ARGV.include?('--migrations-only')
|
68
|
-
|
69
|
-
|
70
|
-
self.class.logger.
|
119
|
+
verbose = (ARGV.include?('--verbose') || ARGV.include?('-v'))
|
120
|
+
Logging.setup(verbose: verbose)
|
121
|
+
self.class.logger.notice('Log buffers flushed')
|
71
122
|
self.class.exit(0)
|
72
123
|
end
|
73
124
|
|
@@ -80,7 +131,7 @@ module Kafo
|
|
80
131
|
prev_config.run_migrations
|
81
132
|
self.class.config.migrate_configuration(prev_config, :skip => [:log_name])
|
82
133
|
setup_config(self.class.config_file)
|
83
|
-
self.class.logger.
|
134
|
+
self.class.logger.notice("Due to scenario change the configuration (#{self.class.config_file}) was updated with #{scenario_manager.previous_scenario} and reloaded.")
|
84
135
|
end
|
85
136
|
end
|
86
137
|
|
@@ -92,7 +143,7 @@ module Kafo
|
|
92
143
|
# so we limit parsing only to app config options (because of --help and later defined params)
|
93
144
|
parse clamp_app_arguments
|
94
145
|
parse_app_arguments # set values from ARGS to config.app
|
95
|
-
|
146
|
+
Logging.setup(verbose: config.app[:verbose])
|
96
147
|
self.class.set_color_scheme
|
97
148
|
|
98
149
|
self.class.hooking.execute(:init)
|
@@ -114,19 +165,17 @@ module Kafo
|
|
114
165
|
|
115
166
|
def run(*args)
|
116
167
|
started_at = Time.now
|
117
|
-
logger.
|
168
|
+
logger.debug("Running installer with args #{args.inspect}")
|
118
169
|
super
|
119
170
|
ensure
|
120
|
-
logger.
|
171
|
+
logger.debug("Installer finished in #{Time.now - started_at} seconds")
|
121
172
|
end
|
122
173
|
|
123
174
|
def execute
|
124
175
|
parse_cli_arguments
|
125
176
|
|
126
|
-
if
|
127
|
-
|
128
|
-
else
|
129
|
-
@progress_bar = self.class.config.app[:colors] ? ProgressBars::Colored.new : ProgressBars::BlackWhite.new
|
177
|
+
if !config.app[:verbose]
|
178
|
+
@progress_bar = config.app[:colors] ? ProgressBars::Colored.new : ProgressBars::BlackWhite.new
|
130
179
|
end
|
131
180
|
|
132
181
|
unless skip_checks_i_know_better?
|
@@ -149,6 +198,7 @@ module Kafo
|
|
149
198
|
|
150
199
|
self.class.hooking.execute(:pre_commit)
|
151
200
|
unless dont_save_answers? || noop?
|
201
|
+
config.configure_application
|
152
202
|
store_params
|
153
203
|
self.class.scenario_manager.link_last_scenario(self.class.config_file) if self.class.scenario_manager.configured?
|
154
204
|
end
|
@@ -158,46 +208,14 @@ module Kafo
|
|
158
208
|
return self
|
159
209
|
end
|
160
210
|
|
161
|
-
def self.run
|
162
|
-
return super
|
163
|
-
rescue SystemExit
|
164
|
-
self.exit_handler.exit(self.exit_code) # fail in initialize
|
165
|
-
end
|
166
|
-
|
167
|
-
def self.exit(code, &block)
|
168
|
-
exit_handler.exit(code, &block)
|
169
|
-
end
|
170
|
-
|
171
|
-
def self.exit_code
|
172
|
-
self.exit_handler.exit_code
|
173
|
-
end
|
174
|
-
|
175
|
-
def self.in_help_mode?
|
176
|
-
ARGV.include?('--help') || ARGV.include?('--full-help') || ARGV.include?('-h')
|
177
|
-
end
|
178
|
-
|
179
211
|
def exit_code
|
180
212
|
self.class.exit_code
|
181
213
|
end
|
182
214
|
|
183
|
-
|
184
215
|
def help
|
185
216
|
self.class.help(invocation_path, self)
|
186
217
|
end
|
187
218
|
|
188
|
-
def self.help(*args)
|
189
|
-
kafo = args.pop
|
190
|
-
builder_class = kafo.full_help? ? HelpBuilders::Advanced : HelpBuilders::Basic
|
191
|
-
args.push builder_class.new(kafo.params)
|
192
|
-
super(*args)
|
193
|
-
end
|
194
|
-
|
195
|
-
def self.app_option(*args, &block)
|
196
|
-
self.app_options ||= []
|
197
|
-
self.app_options.push self.option(*args, &block)
|
198
|
-
self.app_options.last
|
199
|
-
end
|
200
|
-
|
201
219
|
def params
|
202
220
|
@params ||= modules.map(&:params).flatten
|
203
221
|
rescue KafoParsers::ModuleName => e
|
@@ -236,7 +254,6 @@ module Kafo
|
|
236
254
|
@config_reload_requested = true
|
237
255
|
end
|
238
256
|
|
239
|
-
|
240
257
|
private
|
241
258
|
|
242
259
|
def setup_config(conf_file)
|
@@ -263,7 +280,7 @@ module Kafo
|
|
263
280
|
scenario_manager = setup_scenario_manager
|
264
281
|
self.class.scenario_manager = scenario_manager
|
265
282
|
setup_config(self.class.config_file)
|
266
|
-
self.class.logger.
|
283
|
+
self.class.logger.notice('Installer configuration was reloaded')
|
267
284
|
@config_reload_requested = false
|
268
285
|
end
|
269
286
|
end
|
@@ -290,55 +307,66 @@ module Kafo
|
|
290
307
|
end
|
291
308
|
end
|
292
309
|
|
310
|
+
def app_option(*args, &block)
|
311
|
+
self.class.app_option(*args, &block)
|
312
|
+
end
|
313
|
+
|
293
314
|
def set_app_options
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
315
|
+
app_option ['--[no-]colors'], :flag, 'Use color output on STDOUT',
|
316
|
+
:default => config.app[:colors], :advanced => true
|
317
|
+
app_option ['--color-of-background'], 'COLOR', 'Your terminal background is :bright or :dark',
|
318
|
+
:default => config.app[:color_of_background], :advanced => true
|
319
|
+
app_option ['--dont-save-answers'], :flag, "Skip saving answers to '#{self.class.config.answer_file}'?",
|
320
|
+
:default => config.app[:dont_save_answers], :advanced => true
|
321
|
+
app_option '--ignore-undocumented', :flag, 'Ignore inconsistent parameter documentation',
|
322
|
+
:default => config.app[:ignore_undocumented], :advanced => true
|
323
|
+
app_option ['-i', '--interactive'], :flag, 'Run in interactive mode'
|
324
|
+
app_option '--log-level', 'LEVEL', 'Log level for log file output',
|
325
|
+
:default => config.app[:log_level], :advanced => true
|
326
|
+
app_option ['-n', '--noop'], :flag, 'Run puppet in noop mode?',
|
327
|
+
:default => false
|
328
|
+
app_option ['-p', '--profile'], :flag, 'Run puppet in profile mode?',
|
329
|
+
:default => false, :advanced => true
|
330
|
+
app_option ['-s', '--skip-checks-i-know-better'], :flag, 'Skip all system checks',
|
331
|
+
:default => false
|
332
|
+
app_option ['--skip-puppet-version-check'], :flag, 'Skip check for compatible Puppet versions',
|
333
|
+
:default => false, :advanced => true
|
334
|
+
app_option ['-v', '--[no-]verbose'], :flag, 'Display log on STDOUT instead of progressbar',
|
335
|
+
:default => config.app[:verbose]
|
336
|
+
app_option ['-l', '--verbose-log-level'], 'LEVEL', 'Log level for verbose mode output',
|
337
|
+
:default => 'notice'
|
338
|
+
app_option ['-S', '--scenario'], 'SCENARIO', 'Use installation scenario'
|
339
|
+
app_option ['--disable-scenario'], 'SCENARIO', 'Disable installation scenario',
|
340
|
+
:advanced => true
|
341
|
+
app_option ['--enable-scenario'], 'SCENARIO', 'Enable installation scenario',
|
342
|
+
:advanced => true
|
343
|
+
app_option ['--list-scenarios'], :flag, 'List available installation scenarios'
|
344
|
+
app_option ['--force'], :flag, 'Force change of installation scenario',
|
345
|
+
:advanced => true
|
346
|
+
app_option ['--compare-scenarios'], :flag, 'Show changes between last used scenario and the scenario specified with -S or --scenario argument',
|
347
|
+
:advanced => true
|
348
|
+
app_option ['--migrations-only'], :flag, 'Apply migrations to a selected scenario and exit',
|
349
|
+
:advanced => true
|
350
|
+
app_option ['--[no-]parser-cache'], :flag, 'Force use or bypass of Puppet module parser cache',
|
351
|
+
:advanced => true
|
322
352
|
end
|
323
353
|
|
324
354
|
def set_options
|
325
|
-
|
355
|
+
app_option '--full-help', :flag, "print complete help" do
|
326
356
|
@full_help = true
|
327
357
|
request_help
|
328
358
|
end
|
329
359
|
|
330
360
|
modules.each do |mod|
|
331
|
-
|
332
|
-
|
333
|
-
"Enable '#{mod.name}' puppet module",
|
334
|
-
:default => mod.enabled?
|
361
|
+
app_option d("--[no-]enable-#{mod.name}"), :flag, "Enable '#{mod.name}' puppet module",
|
362
|
+
:default => mod.enabled?
|
335
363
|
end
|
336
364
|
|
337
365
|
params.sort.each do |param|
|
338
366
|
doc = param.doc.nil? ? 'UNDOCUMENTED' : param.doc.join("\n")
|
339
|
-
|
367
|
+
app_option parametrize(param), '', doc + " (current: #{param.value_to_s})",
|
340
368
|
:multivalued => param.multivalued?
|
341
|
-
|
369
|
+
app_option parametrize(param, 'reset-'), :flag,
|
342
370
|
"Reset #{param.name} to the default value (#{param.default_to_s})"
|
343
371
|
end
|
344
372
|
end
|
@@ -347,13 +375,15 @@ module Kafo
|
|
347
375
|
# so we accept either allowed args or those that does not start with '-' and are right after
|
348
376
|
# accepted argument
|
349
377
|
def clamp_app_arguments
|
350
|
-
@allowed_clamp_app_arguments = self.class.
|
378
|
+
@allowed_clamp_app_arguments = self.class.declared_options.map do |option|
|
351
379
|
option.switches.map { |s| is_yes_no_flag?(s) ? build_yes_no_variants(s) : s }
|
352
380
|
end
|
353
381
|
@allowed_clamp_app_arguments.flatten!
|
354
382
|
|
355
383
|
last_was_accepted = false
|
356
|
-
ARGV.select
|
384
|
+
ARGV.select do |arg|
|
385
|
+
last_was_accepted = is_allowed_attribute_name?(arg) || (last_was_accepted && is_value?(arg))
|
386
|
+
end
|
357
387
|
end
|
358
388
|
|
359
389
|
def is_yes_no_flag?(s)
|
@@ -373,7 +403,7 @@ module Kafo
|
|
373
403
|
end
|
374
404
|
|
375
405
|
def parse_app_arguments
|
376
|
-
self.class.
|
406
|
+
self.class.declared_options.each do |option|
|
377
407
|
name = option.attribute_name
|
378
408
|
value = send(option.flag? ? "#{name}?" : name)
|
379
409
|
config.app[name.to_sym] = value.nil? ? option.default_value : value
|
@@ -410,11 +440,11 @@ module Kafo
|
|
410
440
|
end
|
411
441
|
|
412
442
|
def validate_all(logging = true)
|
413
|
-
logger.
|
443
|
+
logger.notice 'Running validation checks'
|
414
444
|
results = enabled_params.map do |param|
|
415
445
|
result = param.valid?
|
416
446
|
errors = param.validation_errors.join(', ')
|
417
|
-
progress_log(:error, "Parameter #{with_prefix(param)} invalid: #{errors}") if logging && !result
|
447
|
+
progress_log(:error, "Parameter #{with_prefix(param)} invalid: #{errors}", logger) if logging && !result
|
418
448
|
result
|
419
449
|
end
|
420
450
|
results.all?
|
@@ -445,11 +475,15 @@ module Kafo
|
|
445
475
|
begin
|
446
476
|
command = PuppetCommand.new('include kafo_configure', options, puppetconf).command
|
447
477
|
log_parser = PuppetLogParser.new
|
478
|
+
logger = Logger.new('configure')
|
479
|
+
logger.notice("Starting system configuration")
|
480
|
+
|
448
481
|
PTY.spawn(*PuppetCommand.format_command(command)) do |stdin, stdout, pid|
|
449
482
|
begin
|
450
483
|
stdin.each do |line|
|
451
484
|
line = normalize_encoding(line)
|
452
|
-
|
485
|
+
method, message = log_parser.parse(line)
|
486
|
+
progress_log(method, message, logger)
|
453
487
|
@progress_bar.update(line) if @progress_bar
|
454
488
|
end
|
455
489
|
rescue Errno::EIO # we reach end of input
|
@@ -466,14 +500,15 @@ module Kafo
|
|
466
500
|
rescue PTY::ChildExited => e # could be raised by Process.wait on older ruby or by PTY.check
|
467
501
|
exit_code = e.status.exitstatus
|
468
502
|
end
|
503
|
+
|
469
504
|
@progress_bar.close if @progress_bar
|
470
|
-
logger.
|
471
|
-
|
472
|
-
|
473
|
-
|
505
|
+
logger.notice "Puppet has finished, bye!"
|
506
|
+
|
507
|
+
self.class.hooking.execute(:post)
|
508
|
+
self.class.exit(exit_code)
|
474
509
|
end
|
475
510
|
|
476
|
-
def progress_log(method, message)
|
511
|
+
def progress_log(method, message, logger)
|
477
512
|
@progress_bar.print_error(message + "\n") if method == :error && @progress_bar
|
478
513
|
logger.send(method, message)
|
479
514
|
end
|
@@ -490,30 +525,6 @@ module Kafo
|
|
490
525
|
File.join(Dir.pwd, 'config', 'kafo.yaml')
|
491
526
|
end
|
492
527
|
|
493
|
-
def self.use_colors?
|
494
|
-
if config
|
495
|
-
colors = config.app[:colors]
|
496
|
-
else
|
497
|
-
colors = ARGV.include?('--no-colors') ? false : nil
|
498
|
-
colors = ARGV.include?('--colors') ? true : nil if colors.nil?
|
499
|
-
end
|
500
|
-
colors
|
501
|
-
end
|
502
|
-
|
503
|
-
def self.preset_color_scheme
|
504
|
-
match = ARGV.join(' ').match(/--color-of-background[ =](\w+)/)
|
505
|
-
background = match && match[1]
|
506
|
-
ColorScheme.new(:background => background, :colors => use_colors?).setup
|
507
|
-
end
|
508
|
-
|
509
|
-
def self.set_color_scheme
|
510
|
-
ColorScheme.new(
|
511
|
-
:background => config.app[:color_of_background],
|
512
|
-
:colors => use_colors?).setup
|
513
|
-
end
|
514
|
-
|
515
|
-
private
|
516
|
-
|
517
528
|
def normalize_encoding(line)
|
518
529
|
if line.respond_to?(:encode) && line.respond_to?(:valid_encoding?)
|
519
530
|
line.valid_encoding? ? line : line.encode('UTF-16be', :invalid => :replace, :replace => '?').encode('UTF-8')
|
data/lib/kafo/logger.rb
CHANGED
@@ -1,138 +1,28 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
-
require '
|
3
|
-
require 'logging'
|
2
|
+
require 'kafo/logging'
|
4
3
|
|
5
4
|
module Kafo
|
6
5
|
class Logger
|
7
|
-
class << self
|
8
|
-
attr_writer :loggers
|
9
6
|
|
10
|
-
|
11
|
-
@loggers ||= []
|
12
|
-
end
|
13
|
-
|
14
|
-
def buffer
|
15
|
-
@buffer ||= []
|
16
|
-
end
|
17
|
-
|
18
|
-
def error_buffer
|
19
|
-
@error_buffer ||= []
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
PATTERN = "[%5l %d %c] %m\n"
|
24
|
-
Logging.color_scheme('bright',
|
25
|
-
:levels => {
|
26
|
-
:info => :green,
|
27
|
-
:warn => :yellow,
|
28
|
-
:error => :red,
|
29
|
-
:fatal => [:white, :on_red]
|
30
|
-
},
|
31
|
-
:date => :blue,
|
32
|
-
:logger => :cyan,
|
33
|
-
:line => :yellow,
|
34
|
-
:file => :yellow,
|
35
|
-
:method => :yellow
|
36
|
-
)
|
37
|
-
COLOR_LAYOUT = Logging::Layouts::Pattern.new(:pattern => PATTERN, :color_scheme => 'bright')
|
38
|
-
NOCOLOR_LAYOUT = Logging::Layouts::Pattern.new(:pattern => PATTERN, :color_scheme => nil)
|
39
|
-
|
40
|
-
def self.setup_fatal_logger(layout)
|
41
|
-
fatal_logger = Logging.logger['fatal']
|
42
|
-
fatal_logger.level = 'fatal'
|
43
|
-
fatal_logger.appenders = [::Logging.appenders.stderr(:layout => layout)]
|
44
|
-
self.loggers << fatal_logger
|
45
|
-
end
|
46
|
-
|
47
|
-
def self.setup
|
48
|
-
begin
|
49
|
-
FileUtils.mkdir_p(KafoConfigure.config.app[:log_dir], :mode => 0750)
|
50
|
-
rescue Errno::EACCES
|
51
|
-
puts "No permissions to create log dir #{KafoConfigure.config.app[:log_dir]}"
|
52
|
-
end
|
53
|
-
|
54
|
-
logger = Logging.logger['main']
|
55
|
-
filename = KafoConfigure.config.log_file
|
56
|
-
begin
|
57
|
-
logger.appenders = ::Logging.appenders.rolling_file('configure',
|
58
|
-
:filename => filename,
|
59
|
-
:layout => NOCOLOR_LAYOUT,
|
60
|
-
:truncate => true
|
61
|
-
)
|
62
|
-
# set owner and group (it's ignored if attribute is nil)
|
63
|
-
FileUtils.chown KafoConfigure.config.app[:log_owner], KafoConfigure.config.app[:log_group], filename
|
64
|
-
rescue ArgumentError
|
65
|
-
puts "File #{filename} not writeable, won't log anything to file!"
|
66
|
-
end
|
67
|
-
|
68
|
-
logger.level = KafoConfigure.config.app[:log_level]
|
69
|
-
self.loggers << logger
|
70
|
-
|
71
|
-
setup_fatal_logger(color_layout) unless loggers.detect {|l| l.name == 'verbose'}
|
72
|
-
end
|
73
|
-
|
74
|
-
def self.setup_verbose
|
75
|
-
logger = Logging.logger['verbose']
|
76
|
-
logger.level = (KafoConfigure.config && KafoConfigure.config.app[:verbose_log_level]) || :info
|
77
|
-
layout = color_layout
|
78
|
-
logger.appenders = [::Logging.appenders.stdout(:layout => layout)]
|
79
|
-
self.loggers<< logger
|
80
|
-
end
|
7
|
+
attr_reader :logger, :name
|
81
8
|
|
82
|
-
def
|
83
|
-
|
9
|
+
def initialize(name = 'root')
|
10
|
+
@name = name
|
11
|
+
@logger = (name == 'root') ? Logging.root_logger : Logging.add_logger(name)
|
84
12
|
end
|
85
13
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
def self.to_buffer(buffer, *args)
|
91
|
-
buffer << args
|
92
|
-
end
|
93
|
-
|
94
|
-
def self.dump_errors
|
95
|
-
setup_fatal_logger(color_layout) if loggers.empty?
|
96
|
-
unless self.error_buffer.empty?
|
97
|
-
loggers.each { |logger| logger.error 'Errors encountered during run:' }
|
98
|
-
self.dump_buffer(self.error_buffer)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def dump_errors
|
103
|
-
self.class.dump_errors
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.dump_buffer(buffer)
|
107
|
-
buffer.each do |log|
|
108
|
-
self.loggers.each { |logger| logger.send log[0], *([log[1]].flatten(1)), &log[2] }
|
109
|
-
end
|
110
|
-
buffer.clear
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.color_layout
|
114
|
-
KafoConfigure.use_colors? ? COLOR_LAYOUT : NOCOLOR_LAYOUT
|
115
|
-
end
|
116
|
-
|
117
|
-
def log(name, *args, &block)
|
118
|
-
if self.class.buffering?
|
119
|
-
self.class.to_buffer(self.class.buffer, name, args, &block)
|
14
|
+
def log(level, *args, &block)
|
15
|
+
if Logging.buffering?
|
16
|
+
Logging.to_buffer(@name, level, args, &block)
|
120
17
|
else
|
121
|
-
|
122
|
-
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
%w(warn info debug).each do |name|
|
127
|
-
define_method(name) do |*args, &block|
|
128
|
-
self.log(name, *args, &block)
|
18
|
+
Logging.dump_buffer if Logging.dump_needed?
|
19
|
+
@logger.send(level, *args, &block)
|
129
20
|
end
|
130
21
|
end
|
131
22
|
|
132
|
-
|
133
|
-
define_method(
|
134
|
-
|
135
|
-
self.log(name, *args, &block)
|
23
|
+
Logging::LOG_LEVELS.each do |level|
|
24
|
+
define_method(level) do |*args, &block|
|
25
|
+
log(level, *args, &block)
|
136
26
|
end
|
137
27
|
end
|
138
28
|
end
|