module Chef::Knife::ChopLogging
Attributes
TODO[R]
args[R]
logger[R]
step[R]
Public Instance Methods
getLogger(args,from='',alogger=nil)
click to toggle source
# File lib/chef/knife/chop/logging.rb, line 161 def getLogger(args,from='',alogger=nil) logger = alogger || @logger unless logger unless from=='' from = "#{from} - " end @step = 0 if args if args.key?(:log_file) and args[:log_file] args[:log_path] = File.dirname(args[:log_file]) elsif args[:my_name] if args[:log_path] args[:log_file] = "#{args[:log_path]}/#{args[:my_name]}.log" else args[:log_file] = "/tmp/#{args[:my_name]}.log" end end begin ::Logging.init :trace, :debug, :info, :step, :warn, :error, :fatal, :todo unless defined? ::Logging::MAX_LEVEL_LENGTH if !args[:origins] && @origins args[:origins] = @origins end if args[:origins] and args[:origins][:log_level] args[:from] = "#{args[:origins][:log_level] rescue @origins[:log_level]} " else args[:from] = '' end # @config[:log_opts] = lambda{|mlll| { # :pattern => "%#{mlll}l: %m %C\n", # :date_pattern => '%Y-%m-%d %H:%M:%S', # } # } # l_opts = args[:log_opts].call(::Logging::MAX_LEVEL_LENGTH) rescue { :pattern => "#{args[:from]}%d %#{::Logging::MAX_LEVEL_LENGTH}l: %m\n", :date_pattern => '%Y-%m-%d %H:%M:%S', } logger = ::Logging.logger( STDOUT, l_opts) l_opts = args[:log_opts].call(::Logging::MAX_LEVEL_LENGTH) rescue { :pattern => "#{args[:from]}%d %#{::Logging::MAX_LEVEL_LENGTH}l: %m %C\n", :date_pattern => '%Y-%m-%d %H:%M:%S', } layout = ::Logging::Layouts::Pattern.new(l_opts) if args[:log_file] and args[:log_file].instance_of?(String) dev = args[:log_file] a_opts = Hash.new a_opts[:filename] = dev a_opts[:layout] = layout a_opts.merge! l_opts name = case dev when String; dev when File; dev.path else dev.object_id.to_s end appender = case dev when String ::Logging::Appenders::RollingFile.new(name, a_opts) else ::Logging::Appenders::IO.new(name, dev, a_opts) end logger.add_appenders appender end scheme = ::Logging::ColorScheme.new( 'christo', :levels => { :trace => :light_blue, :debug => :cyan, :info => :green, :step => :green, :warn => :yellow, :error => :red, :fatal => :light_red, :todo => :purple, }).scheme scheme[:todo] = "\e[38;5;55m" l_opts[:color_scheme] = 'christo' layout = ::Logging::Layouts::Pattern.new(l_opts) appender = logger.appenders[0] appender.layout = layout logger.remove_appenders appender logger.add_appenders appender logger.level = args[:log_level] ? args[:log_level] : :warn # logger.trace = true if args[:trace] if args[:trace] if ::Logging::VERSION =~ /^2/ logger.caller_tracing = true else logger.trace = true end end @args = args rescue Gem::LoadError logger = FakeLogger.new rescue => e # not installed logger = FakeLogger.new end @TODO = {} if @TODO.nil? end # if args @logger = alogger || logger end # unless logger logger end
logStep(msg)
click to toggle source
# File lib/chef/knife/chop/logging.rb, line 142 def logStep(msg) if logger = getLogger(@args || @config,'logStep') logger.step "Resource #{@step+=1}: #{msg} ..." end end
logTodo(msg)
click to toggle source
# File lib/chef/knife/chop/logging.rb, line 116 def logTodo(msg) # Regular expression used to parse out caller information # # * $1 == filename # * $2 == line number # * $3 == method name (might be nil) caller_rgxp = %r/([-\.\/\(\)\w]+):(\d+)(?::in `(\w+)')?/o #CALLER_INDEX = 2 caller_index = ((defined? JRUBY_VERSION and JRUBY_VERSION[%r/^1.6/]) or (defined? RUBY_ENGINE and RUBY_ENGINE[%r/^rbx/i])) ? 0 : 0 stack = Kernel.caller return if stack.nil? match = caller_rgxp.match(stack[caller_index]) file = match[1] line = Integer(match[2]) modl = match[3] unless match[3].nil? unless @TODO["#{file}::#{line}"] le = ::Logging::LogEvent.new(@logger, ::Logging::LEVELS['todo'], msg, false) @logger.logEvent(le) @TODO["#{file}::#{line}"] = true end end
setLogger(logger)
click to toggle source
# File lib/chef/knife/chop/logging.rb, line 157 def setLogger(logger) @logger = logger end