From 56a42b9858058473a07f254c49d0bb00dadce2d9 Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 27 Feb 2013 23:53:10 -0800 Subject: improve logging: set exit code on puppet error, better puppet error handling, better handling of multi-line puppet log entries. --- lib/leap_cli/logger.rb | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'lib/leap_cli/logger.rb') diff --git a/lib/leap_cli/logger.rb b/lib/leap_cli/logger.rb index eca7aa6..373af35 100644 --- a/lib/leap_cli/logger.rb +++ b/lib/leap_cli/logger.rb @@ -44,9 +44,9 @@ module LeapCli end def log(level, message, line_prefix=nil, options={}) - # in some cases, when the message doesn't end with a return, we buffer it and - # wait until we encounter the return before we log the message out. if message !~ /\n$/ && level <= 2 && line_prefix.is_a?(String) + # in some cases, when the message doesn't end with a return, we buffer it and + # wait until we encounter the return before we log the message out. @message_buffer ||= "" @message_buffer += message return @@ -56,26 +56,30 @@ module LeapCli end options[:level] ||= level - message.lines.each do |line| - [:stdout, :log].each do |mode| - LeapCli::log_raw(mode) { - formatted_line, formatted_prefix, line_options = apply_formatting(mode, line, line_prefix, options) - if line_options[:level] <= self.level && formatted_line && formatted_line.chars.any? - if formatted_prefix - "[#{formatted_prefix}] #{formatted_line}" - else - formatted_line - end - else - nil - end - } + [:stdout, :log].each do |mode| + LeapCli::log_raw(mode) do + message_lines(mode, message, line_prefix, options) end end end private + def message_lines(mode, message, line_prefix, options) + formatted_message, formatted_prefix, message_options = apply_formatting(mode, message, line_prefix, options) + if message_options[:level] <= self.level && formatted_message && formatted_message.chars.any? + if formatted_prefix + formatted_message.lines.collect { |line| + "[#{formatted_prefix}] #{line.sub(/\s+$/, '')}" + } + else + formatted_message.lines.collect {|line| line.sub(/\s+$/, '')} + end + else + nil + end + end + ## ## FORMATTING ## @@ -114,10 +118,15 @@ module LeapCli { :match => /^warning: .*is deprecated.*$/, :level => 2, :color => :yellow, :priority => -10}, { :match => /^warning: Scope.*$/, :level => 2, :color => :yellow, :priority => -10}, { :match => /^notice:/, :level => 1, :color => :cyan, :priority => -20}, - { :match => /^err:/, :level => 0, :color => :red, :priority => -20}, { :match => /^warning:/, :level => 0, :color => :yellow, :priority => -20}, { :match => /^Duplicate declaration:/, :level => 0, :color => :red, :priority => -20}, { :match => /Finished catalog run/, :level => 0, :color => :green, :priority => -10}, + + # PUPPET FATAL ERRORS + { :match => /^err:/, :level => 0, :color => :red, :priority => -1, :exit => 1}, + { :match => /^Failed to parse template/, :level => 0, :color => :red, :priority => -1, :exit => 1}, + { :match => /^Parameter matches failed:/, :level => 0, :color => :red, :priority => -1, :exit => 1}, + { :match => /^Syntax error/, :level => 0, :color => :red, :priority => -1, :exit => 1} ] def self.sorted_formatters @@ -164,6 +173,10 @@ module LeapCli message.replace(message + formatter[:append]) unless formatter[:append].nil? message.replace(Time.now.strftime('%Y-%m-%d %T') + ' ' + message) if formatter[:timestamp] + if formatter[:exit] + LeapCli::Util.exit_status(formatter[:exit]) + end + # stop formatting, unless formatter was just for string replacement break unless formatter[:replace] end -- cgit v1.2.3